2008-10-14 107 views
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]; 

它看起来像旋转轴的旋转过程中移动。

回答

0

我最终创建了一个新的更大的图层,它的中心位于我的旋转轴处,并将我想要旋转的图层设置为子图层。

然后转动更大的层,而不是子层

+0

虽然这可能适用于您的特定情况,但它不是一个通用的解决方案,因为如果所需的旋转推动容器 - 层超出层大小限制。 锚点真的是你需要的,在这里。 – Olie 2010-03-15 21:07:45

2

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

  1. 通过翻译(-rotCenterX,rotCenterY)层
  2. 旋转层
  3. 由(rotCenterX,rotCenterY)翻译层
3

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

当您设置定位点时,它正在四处移动,因为位置已附加到定位点,即设置定位点集合,其中anchorPoint位于超层的坐标系统中。

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

祝你好运!

1

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