【问题标题】:Core Animation rotating a layer around arbitrary point核心动画围绕任意点旋转图层
【发布时间】:2008-10-14 00:46:00
【问题描述】:

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

看起来旋转轴在旋转过程中正在移动。

【问题讨论】:

    标签: iphone cocoa core-animation


    【解决方案1】:

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

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

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

    祝你好运!

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

          • 虽然这可能适用于您的特定情况,但它不是通用解决方案,因为如果所需的旋转将容器层推到超出层大小限制,它可能会失败。锚点是您真正需要的,在这里。
          猜你喜欢
          • 1970-01-01
          • 2013-01-28
          • 1970-01-01
          • 1970-01-01
          • 2018-01-17
          • 1970-01-01
          • 2012-02-14
          • 2019-07-19
          • 1970-01-01
          相关资源
          最近更新 更多