2011-03-27 92 views
0

我在获取CoreAnimation旋转关于其中心点的NSView时遇到了一些麻烦。我想要做的就是旋转一个NSView,同时保持其中心点静止,以便该对象看起来在原地旋转。CoreAnimation setFrameCenterRotation不能正确动画

我选择这样做的方式涉及在NSView中使用animator属性。代码如下:

[NSAnimationContext beginGrouping]; 
[[NSAnimationContext currentContext] setDuration:1.0]; 

[[view animator] setFrameCenterRotation:45.0]; 

[NSAnimationContext endGrouping]; 

哪里view的是,我想旋转的NSView。这段代码的结果使得对象在某种程度上突然向右移动,然后进行旋转。最终的结果是正确的,但由于它在一开始就进行了移动,所以动画看起来不正确。我假设这是因为setFrameCenterRotation:的工作原理是它首先将帧原点转移到视图的中心点,然后进行旋转。

我在这里做错了什么?有没有更好的方法来旋转关于中心的NSView?非常感谢!

回答

1

首先确保NSView层支持(启用核心动画),否则动画制作者代理会在没有CA的情况下进行动画制作。使用-setWantsLayer:YES或通过在IB中检查该视图的相应选项来执行此操作。

二,层锚点设置为0.5,0.5:

view.layer.anchorPoint = CGPointMake(0.5,0.5); 

第三,你可能需要直接的层互动,如果你不能得到你想要的东西,但先用了AppKit API的尝试,因为它保留鼠标事件等。

+1

感谢您的回答,但似乎我有另一个问题。该层的anchorPoint肯定是问题的根源,但不应该(0.5,0.5)默认?它在苹果的文档中如此明确地表示。无论如何,我的问题现在发生在我有一个'NSViewAnimation'与旋转动画同时运行的时候。当NSViewAnimation同时运行时,设置锚点什么也不做!但是当我不运行NSViewAnimation时,它工作正常。任何想法为什么可能会发生? – zanneth 2011-03-27 23:27:00

+2

谢谢@Zanneth!我遇到了类似的问题,您的评论给我提供了解决问题的必要线索。我正在旋转imageView的根层。其anchorPoint按照标准坐标方向在0,0,左下方读出。我可以将它设置为.5,.5,但它会被忽略,就像你经历过的一样。移动图像和动画到子图层解决了我的问题。显然,每当一个视图或其根层动画时,就会敲掉anchorPoint。希望你能够在你的项目中解决这个问题。 – Wienke 2011-04-17 14:33:50

+0

如何将动画移动到“子图层”?我可以将定位点设置为0.5,但是然后视图突然'跳'到0,0原点,但与其中心一起。 – strange 2012-07-03 22:15:52