我正在尝试使用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仅将变换应用于层次结构中直接位于其下方的图层。是这样的吗?或者我做错了什么?
答案 0 :(得分:2)
诀窍是使用CATransformLayer作为子层。
由于此图层实际上并未“显示”任何内容,因此您需要添加传统的CALayers作为CATransformLayer的子项来执行显示内容的工作。但它所做的是保持对象坐标空间然后将适当的变换应用于其子层的出色工作。