在任意点周围旋转图层的核心动画
问题描述:
如何在任意点周围使用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];
它看起来像旋转轴的旋转过程中移动。
答
我最终创建了一个新的更大的图层,它的中心位于我的旋转轴处,并将我想要旋转的图层设置为子图层。
然后转动更大的层,而不是子层
答
您可以通过附加多个转换做到这一点:
- 通过翻译(-rotCenterX,rotCenterY)层
- 旋转层
- 由(rotCenterX,rotCenterY)翻译层
答
您的解决方案是好的,但“预期的方式”是使用锚点。
当您设置定位点时,它正在四处移动,因为位置已附加到定位点,即设置定位点集合,其中anchorPoint位于超层的坐标系统中。
可能不值得改变,因为你有一些工作,但只是为了下一次添加到灰色的问题。
祝你好运!
答
您的初始解决方案不好,因为翻译动画就像旋转一样。所以你的旋转的“自定义中心”在旋转过程中正在移动。你真正想要的是没有动画的翻译和基于非动画翻译的动画旋转。 事情是,我目前有完全相同的问题,并不能提出解决方案。我现在正在查看CATransaction,希望这可能是关键...
虽然这可能适用于您的特定情况,但它不是一个通用的解决方案,因为如果所需的旋转推动容器 - 层超出层大小限制。 锚点真的是你需要的,在这里。 – Olie 2010-03-15 21:07:45