将CALayer放在SubLayer层次结构中

时间:2014-12-03 15:46:29

标签: rotation transform calayer catransform3d

我正在尝试根据此项目制作一个带CALayers的高级3D多维数据集:

  

https://github.com/joericioppo/3D-Layers/tree/master

我有CALayer层次结构:

self.layer
|
|
 rootLayer (CALayer) <--- in this point the cube is rotated by changing the rootLayer.sublayerTransform property
    |
    |
    transrormLayer(CATransformLayer)
        |
        |
        frontSide (CALayer)
        backSide  (CALayer)
        ...
        bottomSide(CALayer)

我想在self.layer中插入一个CALayer子图层,与其中一个立方体边相同的3D“位置”。我的想法是将transform乘以所有CALayer层次结构transrforms,如下所示:

testLayer.transform = CATransform3DConcat(rootLayer.sublayerTransform, testLayer.transform);
testLayer.transform = CATransform3DConcat(transformLayer.sublayerTransform, testLayer.transform);
testLayer.transform = CATransform3DConcat(bottomSide.transform, testLayer.transform);

我只收到垃圾 - 图层没有放在与bottomSide相同的3D“位置” - 它只是消失了。 但是将图层放在frontSide或backSide中是成功的(只有这两面)。有人能告诉我我做错了什么吗?

1 个答案:

答案 0 :(得分:0)

我删除了transrormLayer。并改变了操作顺序。

CATransform3D t = CATransform3DIdentity;
t = CATransform3DConcat(bottomSide.transform, t); // cube side position
t = CATransform3DConcat(rootLayer.sublayerTransform, t); // cube rotation and perspective
testLayer.transform = t;

现在它运作正常。