3

如何使用 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

4 回答 4

3

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

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

可能不值得改变,因为你有一些工作,但只是下次添加到灰质的东西。

祝你好运!

于 2009-02-05T19:35:07.863 回答
2

您可以通过附加多个转换来做到这一点:

  1. 通过 (-rotCenterX, rotCenterY) 平移图层
  2. 旋转图层
  3. 通过 (rotCenterX, rotCenterY) 平移图层
于 2008-10-14T03:00:07.290 回答
1

您的初始解决方案并不好,因为翻译就像旋转一样具有动画效果。因此,您的旋转的“自定义中心”在旋转期间正在移动。您真正想要的是没有动画的翻译以及基于该非动画翻译的动画旋转。问题是,我目前有完全相同的问题,但还没有提出解决方案。我现在正在看 CATransaction,希望这可能是关键......

于 2009-04-15T20:07:39.873 回答
0

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

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

于 2008-10-20T16:17:50.750 回答