Agregar efecto de desenfoque a fondo en veloz

Estoy configurando una imagen de fondo para ver el controlador. Pero también quiero agregar un efecto de desenfoque a este fondo. ¿Cómo puedo hacer esto?

Estoy configurando el fondo con el siguiente código:

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

Encontré en Internet imágenes borrosas ¿Cómo puedo implementar esto en mi entorno?

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

He probado este código y está funcionando bien:

 let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Dark) let blurEffectView = UIVisualEffectView(effect: blurEffect) blurEffectView.frame = view.bounds blurEffectView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight] view.addSubview(blurEffectView) 

Para Swift 3.0:

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

Aquí puedes ver el resultado:

vista borrosa

O puede usar esta lib para eso:

https://github.com/FlexMonkey/Blurable

Puedes hacer una extensión de UIImageView.

Swift 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) } } 

Uso:

 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) } 

Extensión Swift 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) } } 

Uso:

 yourImageView.addBlurEffect() 

Apéndice:

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

@AlvinGeorge solo debería usar:

 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) } } 

uso :

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

Para Swift 3 (iOS 10.0 y 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) 

U también puede usar CoreImage para crear una imagen borrosa con efecto oscuro

  1. Hacer una instantánea de la imagen

     func snapShotImage() -> UIImage { UIGraphicsBeginImageContext(self.frame.size) if let context = UIGraphicsGetCurrentContext() { self.layer.renderInContext(context) let image = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return image } return UIImage() } 
  2. Aplique los filtros CoreImage como desee

     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() } 

Encontrado de otra manera … Yo uso UIImage + ImageEffects de apple.

  UIImage *effectImage = [image applyExtraLightEffect]; self.imageView.image = effectImage; 

Este siempre mantiene el marco correcto:

 public extension UIView { @discardableResult public func addBlur(style: UIBlurEffectStyle = .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 } }