我有一个视图,它的基础图层,我在视图的图层添加了 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 。
我是否应该搞乱块侧子图层,变换图层,视图图层或视图本身的设置以实现我的目标?
任何指导或指示都将受到赞赏。
答案 0 :(得分:0)
<强>更新强>
我终于意识到并接受了这样一个事实:我不能使用核心动画来做到这一点。
我已经走上了使用 OpenGL 解决这个问题的道路。
随着我一点一点地进行改进,这个问题已经慢慢发展,但最终的结果是让父图层成为 CATransformLayer ,它保留了3D透视图并旋转了它。
就旋转中心而言,我使用 CATransform3DMakeTranslation 来更改图层的位置。