核心动画围绕任意点旋转图层

时间:2008-10-14 00:46:00

标签: iphone cocoa core-animation

如何围绕任意点使用Core Animation旋转图层? (在我的例子中,一个点不在我想要旋转的层内)

我更喜欢这样做而不改变锚点,因为除非我每次更改锚点时出错,否则它也会改变图层的位置。

我尝试了类似的东西,但它不起作用:

[UIImageView beginAnimations:nil context:nil];
CATransform3D rotationTransform = CATransform3DIdentity;
rotationTransform = CATransform3DTranslate(rotationTransform, 0.0, -100.0, 0.0);
rotationTransform = CATransform3DRotate(rotationTransform, DegreesToRadians(180),
                        0.0, 0.0, 1.0);
rotationTransform = CATransform3DTranslate(rotationTransform, 0.0, 100.0, 0.0)
shape1.layer.transform = rotationTransform;
[UIImageView commitAnimations];

看起来旋转轴在旋转期间正在移动。

4 个答案:

答案 0 :(得分:3)

您的解决方案很好但“预期方式”是使用锚点。

当您设置锚点时,它正在移动,因为该位置附加到锚点,即设置anchorPoint位于超级层坐标系中的位置集。

可能不值得改变,因为你有一些工作,但下次还要添加灰色物质。

祝你好运!

答案 1 :(得分:2)

您可以通过附加多个转换来完成此操作:

  1. 翻译图层(-rotCenterX,rotCenterY)
  2. 旋转图层
  3. 翻译图层(rotCenterX,rotCenterY)

答案 2 :(得分:1)

您的初始解决方案并不正常,因为翻译的动画就像旋转一样。因此,旋转过程中旋转的“自定义中心”正在移动。你真正想要的是没有动画的翻译和基于非动画翻译的动画旋转。 事实上,我目前有完全相同的问题,但还没有找到解决方案。我现在正在关注CATransaction,希望这可能是关键......

答案 3 :(得分:0)

我最终通过创建一个新的更大的图层来完成它,它的中心位于我的旋转轴上,并设置我想要旋转的图层作为它的子图层。

然后我旋转更大的层而不是子层