【问题标题】:How to make a CAShapeLayer have a blur effect?如何使 CAShapeLayer 具有模糊效果?
【发布时间】:2020-08-10 20:36:19
【问题描述】:

我有这个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
}

【问题讨论】:

    标签: swift cashapelayer uiblureffect


    【解决方案1】:

    简短的回答:你不知道。您可以在形状图层的视图顶部添加类型模糊(UIBlurEffect)的视觉效果视图(UIVisualEffectView),或者您可以编写获取形状图层内容的代码,对其应用核心图像过滤器,并将输出复制到另一层。

    使用UIVisualEffectView 比使用Core Image 过滤器要容易得多,但是视觉效果视图在视图上运行,而不是在层上运行。您需要使 shaper 图层成为图层层次结构的一部分才能使用它。

    编辑:

    您的代码有错误并且没有真正的意义。您的方法 createLayer(我猜是视图控制器实例方法?)创建并返回一个形状层。

    该方法创建了一个废弃的 UIView,它永远不会添加到视图层次结构中,也不会传递回调用者。一旦您的方法返回,该视图将被释放。

    接下来,您将创建一个视觉效果视图并将其作为一次性视图的子视图。由于该视图的唯一附加位置是丢弃视图,因此它也会在您的方法返回后立即被释放。

    接下来你创建一个形状图层并将其设置为其他一些图层 maskLayer 的蒙版,你不解释。您也没有在形状层中安装路径。

    如果您有一个名为 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 
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-05
      • 2021-03-06
      • 2021-07-20
      • 1970-01-01
      • 2012-03-13
      • 1970-01-01
      • 2014-07-21
      相关资源
      最近更新 更多