本篇所实现的是拍照时候中间一个框,边上都是半透明黑色的效果。
关键
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
网友评论