2

我正在尝试使用 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 仅将变换应用于层层次结构中直接位于其下方的层。是这样吗?还是我做错了什么?

4

1 回答 1

2

诀窍是使用 CATransformLayer 作为子层。

As this layer doesn't actually "display" anything, you will need to add traditional CALayers as children of the CATransformLayer to do the job of displaying content. But what it does do is an excellent job of maintaining an object coordinate space and then applying the appropriate transforms to its child layers.

于 2010-03-10T13:04:19.143 回答