如何解决如何使CAShapeLayer具有模糊效果?
我有这个CAShapeLayer
,我想产生模糊效果。我该怎么做?
编辑 我以这种方式尝试过,但没有显示模糊视图。有人知道为什么吗?谢谢!
func createLayer(in rect: CGRect) -> CAShapeLayer{
let effectView = UIVisualEffectView(effect:UIBlurEffect(style: .regular))
effectView.frame = rect
let view = UIView(frame: rect)
view.addSubview(effectView)
let mask = CAShapeLayer()
mask.frame = rect
mask.cornerRadius = 10
effectView.layer.mask = mask
maskLayer.append(mask)
layer.insertSublayer(mask,at: 1)
return mask
}
解决方法
简短的答案:您不知道。您可以在形状层的视图顶部添加模糊类型(UIVisualEffectView
)的视觉效果视图(UIBlurEffect
),也可以编写采用形状层内容,应用Core的代码。对其进行图像过滤,然后将输出复制到另一层。
使用UIVisualEffectView
比使用Core Image滤镜要容易得多,但是视觉效果视图是在视图而非图层上运行的。您需要使shaper层成为该层的层层次结构的一部分,才能使用它。
编辑:
您的代码有错误,并且没有任何意义。您的方法createLayer(我想是视图控制器实例方法?)创建并返回一个形状层。
该方法将创建一个废弃的UIView,该UIView永远不会添加到视图层次结构中,也不会传递回调用者。方法返回后,该视图将被释放。
接下来,您将创建一个视觉效果视图,并使该视图成为一次性视图的子视图。由于附加视图的唯一位置是一次性视图,因此一旦方法返回,它也会被释放。
接下来,您将创建一个形状图层并将其设置为其他图层maskLayer的遮罩,您无需对其进行说明。您也不会在shape图层中安装路径。
如果您有一个名为ShapeView的ShapeView类的视图,并且想要将视觉效果视图附加到该视图,则可以使用如下代码:
class ViewController: UIViewController {
@IBOutlet weak var shapeView: ShapeView!
var blurView: UIVisualEffectView?
override func viewDidLoad() {
super.viewDidLoad()
blurView = UIVisualEffectView(effect:UIBlurEffect(style: .regular))
blurView?.frame = shapeView.frame
//Add the blur view on top of the shape view
view.addSubview(blurView!)
}
override func viewDidLayoutSubviews() {
//Update the blurView's frame if needed
blurView?.frame = shapeView.frame
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。