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

3

我如何使用核心动画围绕任意点旋转图层?(在我的情况下,这是一个不在我想要旋转的图层内部的点)

我希望在不改变锚点的情况下进行此操作,因为除非我做错了什么,每次更改锚点时它也会更改层的位置。

我尝试过类似于以下代码但无效:

[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个回答

3
你的解决方案没问题,但“预期的方式”是使用锚点。
当你设置锚点时,它会移动位置,因为位置是附加到锚点上的,即设置位置会确定锚点在父层坐标系中的位置。
可能没有必要改变,因为你已经有了可用的东西,但这只是为下一次添加到灰质物质中的一些东西。
祝你好运!

2

您可以通过追加多个转换来实现此操作:

  1. 将图层按(-rotCenterX, rotCenterY)平移
  2. 旋转图层
  3. 将图层按(rotCenterX, rotCenterY)平移

1

你的初始解决方案不太好,因为翻译就像旋转一样是动画的。所以你的旋转的“自定义中心”在旋转过程中也在移动。实际上,你想要的是没有动画的平移和基于这个非动画平移的旋转动画。 问题是,我目前也遇到了完全相同的问题,但还没有找到解决方案。我正在研究CATransaction,希望它能成为关键...


0

我终于做到了,通过创建一个新的更大的图层,将其中心设置在我的旋转轴上,并将我想要旋转的图层设置为其子图层。

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


虽然这可能适用于您的特定情况,但它不是一般解决方案,因为如果所需旋转将容器层推出层大小限制,则可能会失败。在这里,您真正需要的是锚点。 - Olie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接