对CAReplicatorLayer实例应用不同的效果

时间:2015-11-25 12:21:40

标签: ios swift swift2 core-animation swift-playground

我正在尝试使用复制器层来创建原始图层的反射。问题是我想对每个实例应用不同的效果(栅格化副本,但保持原始完整)。这可能是使用复制器层,如果没有,你能建议一种实现这一目标的方法吗?

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

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 个答案:

答案 0 :(得分:2)

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

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

如果您有兴趣,几个月前我发布了一篇简短的文章here(源代码here)。希望这有帮助!