Swift 镂空遮罩层的实现

本篇所实现的是拍照时候中间一个框,边上都是半透明黑色的效果。

关键

    let maskLayer = CAShapeLayer()
    maskLayer.fillRule = kCAFillRuleEvenOdd //奇偶层数显示规则

如果叠加的层是偶数个,则不显示叠加部分。如果是奇数个,则显示该区域内部。
所以在底层上面再叠一层L,L所覆盖的区域就会镂空。

步骤

1.创建一个镂空路径
2.创建CAShapeLayer 将镂空赋值给shapeLayer
3.将shapeLayer 设置为背景视图的Mask

代码

    // 不能直接加在最底层viewController.view上面,会黑掉 后面没东西显示了
    let backgroundView = UIView(frame: view.bounds)
    backgroundView.backgroundColor =  UIColor.init(red: 0, green: 0, blue: 0, alpha: 0.6)
    view.addSubview(backgroundView)

    let maskLayer = CAShapeLayer()
    maskLayer.fillRule = kCAFillRuleEvenOdd //  奇偶层显示规则
    
    let basicPath = UIBezierPath(rect: view.frame) // 底层

    let maskPath = UIBezierPath(ovalIn: CGRect(x: 0, y: 0, width: 35, height: 35)) 
    let maskPath = UIBezierPath(rect: aShape.frame) //自定义的遮罩图形
    basicPath.append(maskPath) // 重叠
    
    maskLayer.path = basicPath.cgPath
    backgroundView.layer.mask = maskLayer

你可能感兴趣的:(Swift 镂空遮罩层的实现)