对 CAReplicatorLayer 实例应用不同的效果

Posted

技术标签:

【中文标题】对 CAReplicatorLayer 实例应用不同的效果【英文标题】:Apply different effects on CAReplicatorLayer instances 【发布时间】:2015-11-25 12:21:39 【问题描述】:

我正在尝试使用复制器层来创建原始层的反射。问题是我想对每个实例应用不同的效果(光栅化副本,但保持原件不变)。是否可以使用复制器层,如果不能,您能否提出一种实现方法?

注意:我尝试复制图层,但无法复制,因为它们是通过引用复制的,因此应用于其中的任何效果都会应用于原始图层。

let r = CAReplicatorLayer()
r.bounds = CGRect(x: 0.0, y: 0.0, width: background.frame.width , height: background.frame.height)
r.position = background.center
background.layer.addSublayer(r)

r.addSublayer(masterLayer)
r.instanceCount = 2
r.instanceTransform = CATransform3DMakeRotation(CGFloat(M_PI), 1, 0, 0)
r.masksToBounds = true
r.shouldRasterize = true
r.rasterizationScale = 0.2

【问题讨论】:

【参考方案1】:

是的,CAReplicatorLayer 的限制之一是您无法直接访问各个复制实例。

您可以尝试完全绕过 CAReplicatorLayer,而是创建您自己的 CALayer 子类,给它一个数组属性来保存复制的子层(允许您直接访问这些子层中的每一个),然后赋予它任何类似 CAReplicator 的能力要求。当然,这不会是 CAReplicatorLayer 的直接替代品,而且我不能说它是否是您正在寻找的解决方案(不知道您试图通过这些单独的层实现的具体细节)但是你可能想试一试。

几个月前我在here(源代码here)上发表了一篇简短的文章,如果你有兴趣的话。希望这会有所帮助!

【讨论】:

谢谢。我只需要确保我的动画跨图层同步,并且能够分别在每个图层上应用不同的效果。

以上是关于对 CAReplicatorLayer 实例应用不同的效果的主要内容,如果未能解决你的问题,请参考以下文章

CAReplicatorLayer

iOS之CAReplicatorLayer属性简介和使用

CoreAnimation 性能分析 - CAReplicatorLayer 和 CAShapeLayer

CAReplicatorLayer复制Layer和动画, 实现神奇的效果

iOS CAReplicatorLayer动画,水波纹动画

几种特殊的layer动画