2016-11-14 91 views
1

如何添加在Swift中具有模糊效果的渐变视图?我可以很容易地将渐变图层(CAGradientLayer)添加到视图中。我也可以单独添加模糊视图(UIVisualEffectView)。将渐变效果应用于模糊视图

如何将两者结合起来以创建一个模糊视图,该视图也具有通过完全模糊淡出而不模糊的渐变元素?

的一个类似的效果实例:

Example of what I'm looking for

+0

你是否设法做到这一点? –

回答

1

如果你知道CoreImage,你可以很容易地链上的两个过滤器一起,一个来自CICategoryBlur,一个来自类别CICategoryGradient。

下面是一个使用示例。 TO链,只需将第一个过滤器的输出作为下一个的输入:

func convertImageToBW(image:UIImage) -> UIImage { 

    let filter = CIFilter(name: "CIPhotoEffectMono") 

    // convert UIImage to CIImage and set as input 

    let ciInput = CIImage(image: image) 
    filter?.setValue(ciInput, forKey: "inputImage") 

    // get output CIImage, render as CGImage first to retain proper UIImage scale 

    let ciOutput = filter?.outputImage 
    let ciContext = CIContext() 
    let cgImage = ciContext.createCGImage(ciOutput!, from: (ciOutput?.extent)!) 

    return UIImage(cgImage: cgImage!) 
} 

上面的链接是Apple文档。

+0

如果您希望使渐变中的模糊量持续变化,可以使用[CIMaskedVariableBlur](https://developer.apple.com/library/content/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html #// apple_ref/doc/filter/ci/CIMaskedVariableBlur),使用与掩码相同的渐变。 – rickster

+0

@dfd - 感谢您的回答!你知道如果可能的话,适配器适用于UIView ...视图可以有这种模糊/渐变效果在UIImageView之上?这样我可以在它下面交换图像,并通过动画还可以使用此模糊/渐变滤镜幻灯片进出。 – Ranknoodle

+0

简短的回答 - 是的。较长的答案? CIImage(CI滤镜的outputImage)最好被认为是图像的“配方”。把它放到一个CG上下文中,写入一个CALayer或者子类,并且你可以把它变成任何UIView或者子类的一部分。在我的下一次升级中,我将控件从“主”视图移动到一个滑动的“控制板”(认为具有滑块和其他控件的键盘),这样做 - 在投影的图像部分上应用模糊背景。它动画和定向到底部或右侧,取决于更长的尺寸。 – dfd