我们什么时候应该使用CATransformLayer?

时间:2014-02-10 07:45:13

标签: ios objective-c core-animation

我已经阅读了文档和几个示例,但仍然无法理解何时使用CATransformLayer。正常CALayer会使z = 0平面上的所有内容变平,但这不是CATransformLayer所做的那样吗?数学解释会非常有用。

2 个答案:

答案 0 :(得分:11)

要完全了解CALayer和CATransformLayer之间的区别,您应该阅读此article

这是解释如何使用CATransformLayer的最佳教程。

但简单地说,
考虑一个场景(CAlayer instance),我们在相同的X,Y坐标处创建4个平面但具有不同的Z并将其作为subLayers添加到场景中。并将场景旋转一定角度。

所以,我们可能会期待它看起来像 enter image description here

但它看起来像是,{{0​​}}

这是因为CALayer无法管理3D层次结构的深度,它只是将场景展平为单个Z级别。为了纠正这个深度问题,我们使用CATransformLayer,它具有深度理解和基于它的渲染。

注意:图片来自文章。

答案 1 :(得分:5)

CATransformLayer用于在3D中转换其子图层,并且不会将它们展平。

  

与普通图层不同,变换图层不会将其子图层投影(即展平)到Z = 0的平面中。

如果你想在一组图层上进行变换,你可以使用它,但是你不想单独对它们进行单独处理,因为你想要在一个地方改变变换的灵活性......那种就像在OpenGL中的相机/世界/模型变换一样。

那就是说,我从来没有机会使用过,因为我从来没有试过在LayerKit中做真正的3D。我假设几年前在WWDC上使用了一个堆叠演示,可能会有示例代码。

如果我发现自己现在开始使用CATransformLayer,我会切换到SceneKit,但这还不在iOS上。