为什么[[NSWindow animator] setFrame ...]有时会非常迟钝?

时间:2013-01-26 23:07:12

标签: objective-c macos cocoa animation nswindow

所以,我有以下代码来展示我的NSWindow

[_window makeKeyAndOrderFront:self]; 

[NSAnimationContext beginGrouping];
[[_window animator] setAlphaValue:1.0];
[[_window animator] setFrame:NSMakeRect([[NSApp currentEvent] window].frame.origin.x - 102, [[NSApp currentEvent] window].frame.origin.y - 238, _window.frame.size.width, _window.frame.size.height) display:YES];
[NSAnimationContext endGrouping];

在用户点击应用的状态栏图标后立即调用此代码,这就是我使用[[NSApp currentEvent] window].frame.origin.y/x获取状态栏图标位置的原因。 /> 这段代码运行得很完美,但有时候,它非常迟钝而且很快就会出现问题。我不知道为什么。
有关于此的任何想法以及如何解决它?

1 个答案:

答案 0 :(得分:4)

NSWindow动画师使用NSAnimation,这意味着它会快速触发计时器以设置窗口框架的动画。在动画的每个帧中,窗口内的每个视图都会重新绘制。如果您的视图层次结构有些复杂,那么性能非常差,并且没有真正的解决方法。

我建议JNWAnimatableWindow替代默认的NSWindow动画师,因为它使用核心动画CALayer来执行动画,因此更加流畅。