2015-06-20 3 views
70

Ich setze ein Hintergrundbild Controller anzeigen. Aber ich möchte auch Unschärfe-Effekt zu diesem Hintergrund hinzufügen. Wie kann ich das machen?Hinzufügen von Unschärfe-Effekt zum Hintergrund in Swift

Ich gründe Hintergrund mit folgendem Code:

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

ich im Internet für Unschärfe Imageview gefunden, wie kann ich dies zu meinem Hintergrund implementieren?

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

Antwort

206

Ich habe diesen Code getestet und es funktioniert gut:

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

für 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) 

Hier können Sie sehen, Ergebnis:

blurred view

Oder Sie können diese lib dafür verwenden:

https://github.com/FlexMonkey/Blurable

+3

Gibt es eine Möglichkeit Unschärfe Skala zu ändern? Es ist zu verschwommen. –

+2

ändern Sie einfach 'UIBlurEffectStyle.Light' –

+8

Oder Sie können das Alpha für die UIVisualEffectView auf weniger als 1.0 festlegen. Versuchen Sie 0.8 oder 0.7. –

36

Sie können eine Verlängerung der UIImageView machen.

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

Usage:

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

Swift 3 Erweiterung

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

Verbrauch:

yourImageView.addBlurEffect() 
+4

Schöne Idee! Könnte es nicht einfach makeBlurImage() sein und dann self anstelle von targetImageView verwenden? –

+1

Ich bin mir nicht sicher, aber dieser Code kann abstürzen, wenn kein Argument richtig übergeben wird? Dies sollte eine Anweisung "if tmpTargetImageView = targetImageView {}" haben – RomOne

+0

@RomOne Sie würden einfach einen Kompilierungsfehler/fehlgeschlagen Build erhalten, wenn Sie kein Argument zur Verfügung stellen. Außerdem würde es ohne ein Bild funktionieren, also keine Notwendigkeit, das auszupacken; und Testen würde Ihnen zeigen, wenn Sie vergessen haben, ein Bild hinzuzufügen oder nicht. – Jimmy

11

@AlvinGeorge sollte nur verwendet werden:

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

Nutzung:

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

U auch Coreimage kann verschwommenes Bild mit dunklem Effekt erzeugen

  1. Make Snapshot für Bild

    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 Filter anwenden wie u mit wünschen

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

einen anderen Weg gefunden .. Ich benutze Apfel UIImage + ImageEffects.

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

Für Swift 3 (iOS 10,0 und 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) 
Verwandte Themen