1

我有一个带有它的底层视图,我在视图的层中添加了一个CATransformLayer

[view.layer addSublayer:transformLayer];

我添加的图层包含代表几个 3 维块的各个侧面的各种子图层。我想将动画应用于图层以旋转块。

CATransform3D rotation = CATransform3DMakeRotation(deg * M_PI / 180, x, y, z);
[CATransaction begin];

    [(CATransformLayer *)[pView.layer.sublayers objectAtIndex:0] setSublayerTransform:rotation];
        or (both seem to produce the same result)
    [(CATransformLayer *)[pView.layer.sublayers objectAtIndex:0] setTransform:rotation];

[CATransaction commit];

问题是图层大致围绕前角而不是立方体的中心旋转(例如,见下文)。

                    / \                  / \        
   / \            / \ / \              / \ / \      
 / \ / \         |\ / \ /|            |\ / \ /|     
|\ / \ /|        | |\ /| |            | |\ /| |     
| |\ /| |         \| | |/ \    OR    / \| | |/      
|\| | |/|  ==>      \|/ \ / \      / \ / \|/        
|1|\|/|B|            |\ / \ /|    |\ /   /|         
 \|2|A|/             |A|\ /| |    | |\ /|2|         
   \|/                \|B| |/      \| |1|/          
                        \|/          \|/            

A/B 标签应移至 1/2 位置,或 1/2 应移至 A/B,具体取决于旋转方向。相反,它从第一个图形改变,大致围绕前角旋转,导致与其他图形接近。上部未标记的块处于不同的视图中并且是静态的,因此不是旋转的一部分。较低标记的块位于我要设置动画的视图/图层中。

如何更改旋转中心以达到我想要的结果?

我已经为各个层弄乱了anchorPointzPositionanchorPointZ,但没有成功。也尝试过setSublayerTransformsetTransform

我应该弄乱块侧子层、变换层、视图层或视图本身的设置来实现我所追求的吗?

任何指导或方向将不胜感激。

4

1 回答 1

0

更新:

我终于意识到并接受了使用Core Animation无法做到这一点的事实。

我已经走上了使用OpenGL解决这个问题的道路。


这个问题随着我一点一点地改进而慢慢演变,但最终的结果是让父层成为CATransformLayer,它保留了 3D 透视图,并旋转了它。

至于旋转中心,我使用CATransform3DMakeTranslation来改变图层的位置。

于 2012-06-08T15:26:10.803 回答