Animation 如何设置CATTransfermLayer动画旋转中心

Animation 如何设置CATTransfermLayer动画旋转中心,animation,ios4,rotation,catransformlayer,Animation,Ios4,Rotation,Catransformlayer,我有一个带有底层的视图,我在视图的层中添加了一个CATTransformLayer: [view.layer addSublayer:transformLayer] 我添加的层包含各种各样的子层,代表几个三维块的各个边。我想将动画应用到层以旋转块 CATransform3D rotation = CATransform3DMakeRotation(deg * M_PI / 180, x, y, z); [CATransaction begin]; [(CATransformLayer

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

[view.layer addSublayer:transformLayer]

我添加的层包含各种各样的子层,代表几个三维块的各个边。我想将动画应用到层以旋转块

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

我应该为块侧子层、变换层、视图层或视图本身设置混乱,以实现我的目标吗

如有任何指导或指示,将不胜感激。

更新:

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

我一直在使用OpenGL解决这个问题

随着我一点一点地改进,这个问题已经慢慢演变,但最终的结果是将父层制作成一个CATTransferMLayer,它保留了3D透视图,并旋转它


至于旋转中心,我使用CATTransformM3dMakeTransflation来更改层的位置。

虽然CATTransformM3dMakeTransflation允许我以某种方式旋转层,但它不正确,仍然不会围绕立方体中心旋转。我仍然不知道如何让它发挥作用。一年多来没有人对此发表评论,但我偶然发现了这一点,并认为它可能会帮助试图解决类似问题的人: