स्विफ्ट में बैकग्राउंड में ब्लर इफेक्ट जोड़ना


118

मैं नियंत्रक को देखने के लिए एक पृष्ठभूमि छवि स्थापित कर रहा हूं। लेकिन मैं भी इस पृष्ठभूमि के लिए कलंक प्रभाव जोड़ना चाहते हैं। मैं यह कैसे कर सकता हूँ?

मैं निम्नलिखित कोड के साथ पृष्ठभूमि सेट कर रहा हूं:

self.view.backgroundColor = UIColor(patternImage: UIImage(named: "testBg")!)

मुझे कलंक छवि के लिए इंटरनेट पर मिला मैं इसे अपनी पृष्ठभूमि पर कैसे लागू कर सकता हूं?

var darkBlur = UIBlurEffect(style: UIBlurEffectStyle.Dark)
// 2
var blurView = UIVisualEffectView(effect: darkBlur)
blurView.frame = imageView.bounds
// 3
imageView.addSubview(blurView)

कृपया कस्टम ब्लर स्केल के लिए यहां देखें stackoverflow.com/a/51406290/7576100
जैक

जवाबों:


334

मैंने इस कोड का परीक्षण किया है और यह ठीक काम कर रहा है:

let blurEffect = UIBlurEffect(style: UIBlurEffect.Style.dark)
let blurEffectView = UIVisualEffectView(effect: blurEffect)
blurEffectView.frame = view.bounds
blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
view.addSubview(blurEffectView)

स्विफ्ट 3.0 के लिए:

let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.dark)
let blurEffectView = UIVisualEffectView(effect: blurEffect)
blurEffectView.frame = view.bounds
blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
view.addSubview(blurEffectView)

स्विफ्ट 4.0 के लिए:

let blurEffect = UIBlurEffect(style: UIBlurEffect.Style.dark)
let blurEffectView = UIVisualEffectView(effect: blurEffect)
blurEffectView.frame = view.bounds
blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
view.addSubview(blurEffectView)

यहाँ आप परिणाम देख सकते हैं:

धुंधला दृश्य

या आप इसके लिए इस लिब का उपयोग कर सकते हैं:

https://github.com/FlexMonkey/Blurable


5
क्या धब्बा पैमाने को बदलने का एक तरीका है? यह बहुत धुंधला है।
तोलगे टोकर

2
बस बदलावUIBlurEffectStyle.Light
धर्मेश खेनी

11
या आप UIVisualEffectView पर अल्फ़ा को 1.0 से कम पर सेट कर सकते हैं। 0.8 या 0.7 का प्रयास करें।
डंकन सी

31
Apple VisualEffectV recommendew के अल्फा को बदलने की अनुशंसा नहीं करता है
टॉल्गै टोकलर

4
इस धुंधला के नीचे सभी नियंत्रण छिपे हुए हैं। इसके बजाय addSubview - self.view.insertSubview (blurEffectView, पर: 0 का उपयोग करें)
Leonif

45

आप UIImageView का विस्तार कर सकते हैं।

स्विफ्ट 2.0

import Foundation
import UIKit

extension UIImageView
{
    func makeBlurImage(targetImageView:UIImageView?)
    {
        let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Dark)
        let blurEffectView = UIVisualEffectView(effect: blurEffect)
        blurEffectView.frame = targetImageView!.bounds

        blurEffectView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight] // for supporting device rotation
        targetImageView?.addSubview(blurEffectView)
    }
}

उपयोग:

override func viewDidLoad()
{
    super.viewDidLoad()

    let sampleImageView = UIImageView(frame: CGRectMake(0, 200, 300, 325))
    let sampleImage:UIImage = UIImage(named: "ic_120x120")!
    sampleImageView.image =  sampleImage

    //Convert To Blur Image Here
    sampleImageView.makeBlurImage(sampleImageView)

    self.view.addSubview(sampleImageView)
}

स्विफ्ट 3 एक्सटेंशन

import Foundation
import UIKit

extension UIImageView
{
    func addBlurEffect()
    {
        let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.light)
        let blurEffectView = UIVisualEffectView(effect: blurEffect)
        blurEffectView.frame = self.bounds

        blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight] // for supporting device rotation
        self.addSubview(blurEffectView)
    }
}

उपयोग:

yourImageView.addBlurEffect()

परिशिष्ट:

extension UIView {

  /// Remove UIBlurEffect from UIView
  func removeBlurEffect() {
    let blurredEffectViews = self.subviews.filter{$0 is UIVisualEffectView}
    blurredEffectViews.forEach{ blurView in
      blurView.removeFromSuperview()
    }
  }

7
अछा सुझाव! यह सिर्फ makeBlurImage () नहीं हो सकता है और फिर targetImageView के बजाय स्वयं का उपयोग कर सकता है?
इमानुएल फुमगल्ली

1
मुझे यकीन नहीं है लेकिन अगर कोई तर्क सही से पारित नहीं हुआ तो यह कोड क्रैश हो सकता है? यह एक "अगर tmpTargetImageView = targetImageView {}" कथन होना चाहिए
रोमेन

@ RomOne यदि आप तर्क प्रदान नहीं करते हैं तो आपको बस एक संकलन त्रुटि / असफल निर्माण मिलेगा। इसके अलावा, यह एक छवि के बिना काम करेगा ताकि इसे खोलना न हो; और परीक्षण आपको दिखाएगा कि आप एक छवि जोड़ना भूल गए या नहीं।
जोश

यदि यह एक ImageView पास है, तो बिंदु दुर्घटनाग्रस्त हो जाएगा। आदर्श @EmanueleFumagalli का लक्ष्यआईमैसेज व्यू के बजाय स्वयं का उपयोग करने का विचार है, लेकिन यह भी एक शून्य कथन के मामले में एक गार्ड स्टेटमेंट का उपयोग करना और वापस करना संभव है।
उजाक

अपनी छवि को धुंधला के साथ भी वर्णन देना बेहतर है। अच्छा धन्यवाद।
MRizwan33

13

@ एल्विनगॉर को बस उपयोग करना चाहिए:

extension UIImageView{        
    func blurImage()
    {
        let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Dark)
        let blurEffectView = UIVisualEffectView(effect: blurEffect)
        blurEffectView.frame = self.bounds

        blurEffectView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight] // for supporting device rotation
        self.addSubview(blurEffectView)
    }
}

उपयोग :

 blurredBackground.frame = self.view.bounds
 blurredBackground.blurImage()
 self.view.addSubview(self.blurredBackground)

11

स्विफ्ट 3 (iOS 10.0 और 8.0) के लिए

var darkBlur:UIBlurEffect = UIBlurEffect()

if #available(iOS 10.0, *) { //iOS 10.0 and above
    darkBlur = UIBlurEffect(style: UIBlurEffectStyle.prominent)//prominent,regular,extraLight, light, dark
} else { //iOS 8.0 and above
  darkBlur = UIBlurEffect(style: UIBlurEffectStyle.dark) //extraLight, light, dark
}
let blurView = UIVisualEffectView(effect: darkBlur)
blurView.frame = self.view.frame //your view that have any objects
blurView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
view.addSubview(blurView)

10

U डार्क इफेक्ट के साथ धुंधली इमेज बनाने के लिए CoreImage का भी इस्तेमाल कर सकता है

  1. छवि के लिए स्नैपशॉट बनाएं

    func snapShotImage() -> UIImage {
        UIGraphicsBeginImageContext(self.frame.size)
        if let context = UIGraphicsGetCurrentContext() {
            self.layer.renderInContext(context)
            let image = UIGraphicsGetImageFromCurrentImageContext()
            UIGraphicsEndImageContext()
            return image
        }
    
        return UIImage()
    }
  2. यू के साथ CoreImage फ़िल्टर लागू करें

    private func bluredImage(view:UIView, radius:CGFloat = 1) -> UIImage {
    let image = view.snapShotImage()
    
    if let source = image.CGImage {
        let context = CIContext(options: nil)
        let inputImage = CIImage(CGImage: source)
    
        let clampFilter = CIFilter(name: "CIAffineClamp")
        clampFilter?.setDefaults()
        clampFilter?.setValue(inputImage, forKey: kCIInputImageKey)
    
        if let clampedImage = clampFilter?.valueForKey(kCIOutputImageKey) as? CIImage {
            let explosureFilter = CIFilter(name: "CIExposureAdjust")
            explosureFilter?.setValue(clampedImage, forKey: kCIInputImageKey)
            explosureFilter?.setValue(-1.0, forKey: kCIInputEVKey)
    
            if let explosureImage = explosureFilter?.valueForKey(kCIOutputImageKey) as? CIImage {
                let filter = CIFilter(name: "CIGaussianBlur")
                filter?.setValue(explosureImage, forKey: kCIInputImageKey)
                filter?.setValue("\(radius)", forKey:kCIInputRadiusKey)
    
                if let result = filter?.valueForKey(kCIOutputImageKey) as? CIImage {
                    let bounds = UIScreen.mainScreen().bounds
                    let cgImage = context.createCGImage(result, fromRect: bounds)
                    let returnImage = UIImage(CGImage: cgImage)
                    return returnImage
                }
            }
        }
    }
    return UIImage()
    }

8

इसने स्विफ्ट 5 पर मेरे लिए काम किया

let blurredView = UIVisualEffectView(effect: UIBlurEffect(style: .light))
blurredView.frame = self.view.bounds
backgroundimage.addSubview(blurredView)

1
हाय @ मर्ता, क्या आप जानते हैं कि धुंधलेपन की क्षमता को कैसे कम किया जाए?
आकाश

5

यह हमेशा सही फ्रेम रखता है:

public extension UIView {

    @discardableResult
    public func addBlur(style: UIBlurEffect.Style = .extraLight) -> UIVisualEffectView {
        let blurEffect = UIBlurEffect(style: style)
        let blurBackground = UIVisualEffectView(effect: blurEffect)
        addSubview(blurBackground)
        blurBackground.translatesAutoresizingMaskIntoConstraints = false
        blurBackground.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true
        blurBackground.topAnchor.constraint(equalTo: topAnchor).isActive = true
        blurBackground.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true
        blurBackground.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true
        return blurBackground
    }
}

3

आपको हमेशा शैली के लिए .dark का उपयोग करना चाहिए और इसे शांत दिखने के लिए निम्न कोड जोड़ना चाहिए

    blurEffectView.backgroundColor = .black
    blurEffectView.alpha = 0.4

1

यह कोड मेरे लिए ठीक काम कर रहा है! इसकी स्विफ्ट 4.x के लिए

let blurEffect = UIBlurEffect(style: .ExtraLight)
let blurEffectView = UIVisualEffectView(effect: blurEffect)
blurEffectView.frame = self.view.frame
self.view.insertSubview(blurEffectView, atIndex: 0)


0

UIView एक्सटेंशन में:

func addBlurredBackground(style: UIBlurEffect.Style) {
    let blurEffect = UIBlurEffect(style: style)
    let blurView = UIVisualEffectView(effect: blurEffect)
    blurView.frame = self.frame
    blurView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    self.addSubview(blurView)
    self.sendSubviewToBack(blurView)
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.