CoreAnimation setFrameCenterRotation没有正确动画

时间:2011-03-27 02:15:26

标签: objective-c cocoa macos core-animation

我在让CoreAnimation围绕其中心点旋转NSView时遇到了一些麻烦。我想要做的就是旋转NSView,同时保持其中心点静止,以便对象看起来在适当的位置旋转。

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

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

[[view animator] setFrameCenterRotation:45.0];

[NSAnimationContext endGrouping];

view是我试图旋转的NSView。此代码的结果使对象突然向右移动,然后进行旋转。最终结果是正确的,但动画看起来不正确,因为它在开始时所做的运动。我假设这是因为setFrameCenterRotation:的工作方式是首先将帧原点移动到视图的中心点,然后进行旋转。

我在这里做错了什么?是否有更好的方法可以围绕中心旋转NSView?非常感谢!

1 个答案:

答案 0 :(得分:0)

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

其次,将图层锚点设置为0.5,0.5:

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

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