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

2024-01-10

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


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

我会推荐JNW动画窗口 https://github.com/jwilling/JNWAnimatableWindow作为默认的替代品NSWindow动画师,因为它使用核心动画CALayer执行动画,因此更加流畅。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 [[NSWindow animator] setFrame...] 有时非常滞后? 的相关文章

随机推荐