CAReplicatorLayer的神奇之处在哪里?

19
我觉得CAReplicatorLayer很有趣:
  • 它能够以非常高效的方式使用不同的变换多次显示CALayer(是如何做到的?)
  • 它似乎会重用复制图层的“后备存储”,甚至对其应用一些颜色色调(是如何做到的?)
我想要了解CAReplicatorLayer背后的代码或者掌握一些它神奇的知识。我想要一个类似于CAReplicatorLayer的CALayer类,但拥有更多的控制权。我希望在每个复制实例上单独地控制变换。
换句话说:是否可能获取CALayer的“后备存储”,并按照自己的意愿任意多次地显示它?
(“后备存储”指的是CALayer / UIView的渲染纹理。我对CoreAnimation / QuartzCore内部发生的事情知之甚少。)
为什么我不考虑其他替代方案,例如将CALayer呈现为UIImage:
  • 性能
  • 内容在转换下频繁变化
  • 使用其他方式做这件事会非常棒!

2
我自己一直在想这个问题。希望有比我们更聪明的人过来哈哈。 - Ryan Poolos
1个回答

10

特殊用途的CALayer(如CAReplicatorLayer或CAGradientLayer)能够(通过私有API)使用快速填充或复制直接在GPU上执行其绘图。从某种意义上说,它们不同之处在于后备存储器不在普通RAM中,而是直接在GPU上。


谢谢您的回复。这对我原本所期望做的事情来说听起来并不太乐观,但确实澄清了一些方面 :) - hfossli
你可以始终使用EAGLLayer,并使用OpenGL和着色器进行绘制。这将是进行自定义绘制的最快方法。 - Cocoanetics
我猜我不能仅依靠UIView做到那样的事情?或者说在我的情况下:我正在做一些像复制UIWebView这样大胆的事情。我非常希望有类似CAReplicatorLayer的东西,但可以控制每个实例的变换(而不是CAReplicatorLayer提供的增量变换)。如果OpenGL / EAGLLayer提供这个功能,我会非常高兴。 - hfossli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接