我有一个关于如何将多个蒙版应用到已经有蒙版的 UIView 的问题。
情况:
我有一个带有活动蒙版的视图,它在左上角创建一个洞,这是一个模板 UIView,可在项目中的任何地方重用。在项目的后期,我希望能够创建第二个孔,但这次是在右下角,这不需要创建一个全新的 UIView。
问题:
当我应用底部面罩时,它当然会取代第一个面罩,从而去除顶部的孔......有没有办法将它们两者结合起来?就这一点而言,将任何现有的面具与新的面具结合起来?
先感谢您!
根据@Sharad 的回答,我意识到重新添加视图的矩形将使我能够将原始蒙版和新蒙版合并为一个。
这是我的解决方案:
func cutCircle(inView view: UIView, withRect rect: CGRect) {
// Create new path and mask
let newMask = CAShapeLayer()
let newPath = UIBezierPath(ovalIn: rect)
// Create path to clip
let newClipPath = UIBezierPath(rect: view.bounds)
newClipPath.append(newPath)
// If view already has a mask
if let originalMask = view.layer.mask,
let originalShape = originalMask as? CAShapeLayer,
let originalPath = originalShape.path {
// Create bezierpath from original mask's path
let originalBezierPath = UIBezierPath(cgPath: originalPath)
// Append view's bounds to "reset" the mask path before we re-apply the original
newClipPath.append(UIBezierPath(rect: view.bounds))
// Combine new and original paths
newClipPath.append(originalBezierPath)
}
// Apply new mask
newMask.path = newClipPath.cgPath
newMask.fillRule = kCAFillRuleEvenOdd
view.layer.mask = newMask
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)