2015-09-15 67 views
4

我試圖將UIImageView的圖像屬性設置爲我與CoreImage模糊的圖像。該代碼與未過濾的圖像完美匹配,但是當我將背景圖像設置爲已過濾的圖像時,contentMode似乎停止了對於UIImageView的工作 - 而不是縱向填充,圖像變爲垂直拉伸。除了在代碼中設置contentMode之外,我還將其設置在故事板上,但結果相同。UIImageView contentMode模糊效果應用程序後不工作

我使用斯威夫特2/Xcode的7

func updateBackgroundImage(image: UIImage) { 
    backgroundImage.contentMode = .ScaleAspectFill 
    backgroundImage.layer.masksToBounds = true 
    backgroundImage.image = blurImage(image) 
} 

func blurImage(image: UIImage) -> UIImage { 
    let imageToBlur = CIImage(image: image)! 

    let blurfilter = CIFilter(name: "CIGaussianBlur")! 
    blurfilter.setValue(10, forKey: kCIInputRadiusKey) 
    blurfilter.setValue(imageToBlur, forKey: "inputImage") 

    let resultImage = blurfilter.valueForKey("outputImage") as! CIImage 
    let croppedImage: CIImage = resultImage.imageByCroppingToRect(CGRectMake(0, 0, imageToBlur.extent.size.width, imageToBlur.extent.size.height)) 
    let blurredImage = UIImage(CIImage: croppedImage) 

    return blurredImage 
} 

爲什麼與CIImage過濾引起我的形象忽略contentMode,我如何解決這個問題?

回答

5

解決辦法是更換您的線路:

let blurredImage = UIImage(CIImage: croppedImage) 

與這兩條線:

let context = CIContext(options: nil) 
let blurredImage = UIImage (CGImage: context.createCGImage(croppedImage, fromRect: croppedImage.extent)) 

所以你完全blurImage功能應該是這樣的:

func blurImage(image: UIImage) -> UIImage { 
    let imageToBlur = CIImage(image: image)! 

    let blurfilter = CIFilter(name: "CIGaussianBlur")! 
    blurfilter.setValue(10, forKey: kCIInputRadiusKey) 
    blurfilter.setValue(imageToBlur, forKey: "inputImage") 

    let resultImage = blurfilter.valueForKey("outputImage") as! CIImage 
    let croppedImage: CIImage = resultImage.imageByCroppingToRect(CGRectMake(0, 0, imageToBlur.extent.size.width, imageToBlur.extent.size.height)) 
    let context = CIContext(options: nil) 
    let blurredImage = UIImage (CGImage: context.createCGImage(croppedImage, fromRect: croppedImage.extent)) 

    return blurredImage 
} 
+0

謝謝!爲什麼在'UIImage'之前需要將它製作成'CGImage'? –