我试图使用复制器层来创建原始层的反射。问题是我想对每个实例应用不同的效果(光栅化副本,但保持原始副本不变)。这可能使用复制器层吗?如果不可能,您能建议一种实现这一点的方法吗?
注意:我试着复制图层,但我不能,因为它们是通过引用复制的,因此应用到其中一个图层的任何效果都将应用到原始图层。

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

最佳答案

是的,CAReplicatorLayer的一个限制是您没有直接访问单个复制实例的权限。
您可以尝试完全绕过CAReplicatorLayer,而是创建自己的CALayer子类,给它一个数组属性来保存复制的子层(允许您直接访问这些子层中的每一个子层),然后赋予它所需的类似CAReplicator的能力。当然,这并不是CAReplicatorLayer的替代品,我也不能说这是否是您正在寻找的解决方案(不知道您试图通过这些单独的层实现什么的具体细节),但您可能希望尝试一下。
如果你感兴趣的话,我几个月前发表了一篇关于这个的短文。希望这有帮助!

10-05 20:12