【问题标题】:Can a single CALayer be used as the mask for multiple other layers?单个 CALayer 可以用作多个其他图层的掩码吗?
【发布时间】:2015-01-08 17:12:59
【问题描述】:

我在文档中找不到任何内容表明单个 CALayer(或子类)是否可以用作多个其他层的 mask 属性。可能吗?还是未定义?

【问题讨论】:

  • 奇怪的是你不能这样做。每层都必须有自己的遮罩层!如果你必须使用相同的面具,你确实必须复制它!

标签: ios core-animation calayer mask


【解决方案1】:

我的实验表明它不能。它将最终作为它附加到的最后一个图层的蒙版,并且任何以前分配为蒙版的图层都将恢复为蒙版的默认值。

【讨论】:

  • Travis,如果你看到这个 .. 你的旧 QA 似乎完全正确!很奇怪吧?
【解决方案2】:

这是可能的。 我将 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

【讨论】:

    猜你喜欢
    • 2021-02-08
    • 2013-06-07
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 2014-09-21
    相关资源
    最近更新 更多