如何在Swift中添加具有模糊效果的渐变视图?我可以很容易地为视图添加渐变图层(CAGradientLayer)。我还可以单独添加模糊视图(UIVisualEffectView)。
如何将两者结合起来创建一个模糊视图,该视图还具有渐变元素,其中完全模糊渐渐消失为无模糊?
类似效果的一个例子:
答案 0 :(得分:1)
如果您知道CoreImage,则可以轻松地将两个过滤器链接在一起,一个来自CICategoryBlur,另一个来自CICategoryGradient。
以下是使用示例。要链,只需将第一个过滤器的输出作为下一个的输入:
var choose : String {
if children.count == 1 || children.count == 0 {
return "child"
} else {
return "children"
}
}
上面的链接是Apple文档。
答案 1 :(得分:0)
要获得具有渐变模糊半径的模糊视图,可以执行以下(per Apple document):
let ciContext = CIContext(options: nil)
if let inputImage = CIImage(image: yourUIImage) {
let extent = inputImage.extent
let h = extent.size.height
guard let gradient = CIFilter(name: "CILinearGradient") else { return }
gradient.setValue(CIVector(x: 0, y: 0.85 * h), forKey: "inputPoint0")
gradient.setValue(CIColor.green, forKey: "inputColor0")
gradient.setValue(CIVector(x: 0, y: 0.50 * h), forKey: "inputPoint1")
gradient.setValue(CIColor(red: 0, green: 1, blue: 0, alpha: 0), forKey: "inputColor1")
guard let mask = CIFilter(name: "CIMaskedVariableBlur") else { return }
mask.setValue(inputImage.clampedToExtent(), forKey: kCIInputImageKey)
// Set your blur radius here, default is 5
mask.setValue(10, forKey: kCIInputRadiusKey)
mask.setValue(gradient.outputImage, forKey: "inputMask")
guard let output = mask.outputImage,
let cgImage = ciContext.createCGImage(output, from: extent) else { return }
outUIImage = UIImage(cgImage: cgImage)
}
在这里,inputPoint0
是渐变斜坡的起点,inputPoint1
是终点。请注意,对于CIVector
,y从下到上增加。设置的输入颜色无关紧要,仅使用其Alpha来确定模糊半径。
关于将CIFilter动态应用于其下的图像的第二个问题,不,这是不可能的。 backgroundFilters
上有一个Apple document,可能会让您认为它是可行的,直到您在底部看到为止。
iOS的图层不支持此属性。
您应该做的是,每当您重置图像时,将上述操作应用于该图像并将其设置为图像视图。