如何设置CATransformLayer动画旋转中心

时间:2012-06-06 23:17:48

标签: animation ios4 rotation catransformlayer

我有一个视图,它的基础图层,我在视图的图层添加了 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,具体取决于旋转方向。相反,它从第一个数字改变,大致围绕前角旋转,导致与其他数字接近的东西。上部未标记的块在不同的视图中是静态的,因此不是旋转的一部分。标记较低的块位于我尝试动画的视图/图层中。

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

我对各种图层的 anchorPoint zPosition anchorPointZ 搞砸了但没有成功。尝试了 setSublayerTransform setTransform

我是否应该搞乱块侧子图层,变换图层,视图图层或视图本身的设置以实现我的目标?

任何指导或指示都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

<强>更新

我终于意识到并接受了这样一个事实:我不能使用核心动画来做到这一点。

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


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

就旋转中心而言,我使用 CATransform3DMakeTranslation 来更改图层的位置。