3

所以,我有以下代码来显示我的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获取状态栏图标位置的原因。
这段代码运行完美,但有时它非常滞后和“跳跃”,我不知道为什么。
关于这个以及如何解决它的任何想法?

4

1 回答 1

5

NSWindow动画师使用,这NSAnimation意味着它会快速触发一个计时器来为窗口的框架设置动画。在动画的每一帧,窗口内的每个视图都被重绘。如果您的视图层次结构有些复杂的大型视图,则性能非常糟糕,并且没有真正的解决方法。

我会推荐JNWAnimatableWindow作为默认NSWindow动画器的替代品,因为它使用核心动画CALayer来执行动画,因此更加流畅。

于 2013-02-03T09:13:51.080 回答