从 CALayer 掩码中清除?

Posted

技术标签:

【中文标题】从 CALayer 掩码中清除?【英文标题】:Clear from CALayer mask? 【发布时间】:2013-10-11 11:03:18 【问题描述】:

我有一个基础层,用透明遮罩层遮罩。

遮罩层有一个子层,一个透明的圆圈。 工作正常,基础层被圆圈掩盖。

但我想用圆圈清除(清零)蒙版像素。不填满。 你能得到我想要的吗?

怎么做?


您可以在此处查看蒙版图像的 Alpha 通道。


这是一个 60 fps 的动画,所以分配实例/自定义绘制每一帧我认为不是解决方案,这会降低性能。

【问题讨论】:

太复杂的问题措辞... (?) 【参考方案1】:

它可以仅通过自定义绘图在 CALAyer 子类中执行(至少在 ios 上,还没有任何用于混合的 CIFilter)。正是我想要避免的。 :(

方法有很多,但最简单的似乎是使用清晰混合模式。

// Draw with Clear (!) blend mode.
CGContextSetBlendMode(context, kCGBlendModeClear);
CGContextSetFillColorWithColor(context, self.color.CGColor);
CGContextFillPath(context);

甚至不需要任何剪辑或遮罩。也许我会通过缓存路径渲染来获得性能。

【讨论】:

以上是关于从 CALayer 掩码中清除?的主要内容,如果未能解决你的问题,请参考以下文章

如何检测两个 CALayer 是不是重叠?

CALayer 从当前值淡出

更新 CALayer 的旋转

CALayer - 未调用显示方法

CALayer 帧值即使在从超级层中移除后也会导致动画

CATiledLayer 到 CALayer