【发布时间】:2015-01-08 17:12:59
【问题描述】:
我在文档中找不到任何内容表明单个 CALayer(或子类)是否可以用作多个其他层的 mask 属性。可能吗?还是未定义?
【问题讨论】:
-
奇怪的是你不能这样做。每层都必须有自己的遮罩层!如果你必须使用相同的面具,你确实必须复制它!
标签: ios core-animation calayer mask
我在文档中找不到任何内容表明单个 CALayer(或子类)是否可以用作多个其他层的 mask 属性。可能吗?还是未定义?
【问题讨论】:
标签: ios core-animation calayer mask
我的实验表明它不能。它将最终作为它附加到的最后一个图层的蒙版,并且任何以前分配为蒙版的图层都将恢复为蒙版的默认值。
【讨论】:
这是可能的。 我将 CAGradationLayer 和 CAShapeLayer 的蒙版组合在一起。
我用两层制作了UIImage,我用它来遮罩。
您可以从 CALayer 生成图像,如下所示。
extension CALayer {
func makeImage() -> UIImage {
UIGraphicsBeginImageContext(self.frame.size)
self.renderInContext(UIGraphicsGetCurrentContext())
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
}
而且你可以多层屏蔽。
firstMask.mask = secondMask
let img = firstMask.makeImage()// require firstMask.frame
let combinedMask = CALayer()
combinedMask.frame = CGRectMake(0,0, img.size.width, img.size.height)
combinedMask.contents = img.CGImage
yourLayer.mask = combinedMask
【讨论】: