我正在尝试利用 CALayers 在我的一个应用程序中创建 3D 风格效果。然而,嵌套的 CALayers 似乎没有应用透视。
为了用伪代码进行说明,如果我有一个像这样应用透视的图层:
CATransform3D subLayerTransform = CATransform3DIdentity;
/* set perspective */
subLayerTransform.m34 = -0.002;
superLayer.sublayerTransform = subLayerTransform;
添加然后向其添加一个图层,如下所示:
CALayer *sublayer = [CALayer layer];
sublayer.frame = layerFrame;
sublayer.contents = (id)[image CGImage];
[superLayer addSublayer: sublayer];
透视图按预期应用。但是,如果我尝试进一步嵌套层
CALayer *sublayer = [CALayer layer];
[superLayer addSublayer: sublayer];
CALayer *nestedlayer = [CALayer layer];
nestedlayer.frame = layerFrame;
nestedlayer.contents = (id)[image CGImage];
[sublayer addSublayer: nestedlayer];
旋转时嵌套层是平坦的。
就好像 superLayer 仅将变换应用于图层层次结构中直接位于其下方的图层。是这样吗?还是我做错了什么?
最佳答案
技巧是使用 CATransformLayer 作为子层。
由于该层实际上并不“显示”任何内容,因此您需要添加传统的 CALayers 作为 CATransformLayer 的子级来完成显示内容的工作。但它所做的是出色地维护对象坐标空间,然后将适当的变换应用于其子层。
关于iphone - 嵌套 CALayers 不接受透视变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2412550/