为什么 [[NSWindow animator] setFrame...] 有时非常滞后?

Ped*_*ira 3 macos cocoa animation objective-c 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];
Run Code Online (Sandbox Code Playgroud)

在用户单击应用程序的状态栏图标后立即调用此代码,这就是为什么我使用[[NSApp currentEvent] window].frame.origin.y/x来获取状态栏图标的位置。
这段代码运行完美,但有时,它非常滞后和“跳跃”,我不知道为什么。
关于这个以及如何解决它的任何想法?

ind*_*gie 5

NSWindow动画的用途NSAnimation,这意味着它迅速触发定时器以动画窗口的框架上。在动画的每一帧,窗口内的每个视图都被重绘。如果您有一些视图层次结构有些复杂的大视图,则性能会很差,并且没有真正的方法来解决它。

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