【问题标题】:Why is [[NSWindow animator] setFrame...] very laggy sometimes?为什么 [[NSWindow animator] setFrame...] 有时非常滞后?
【发布时间】:2013-01-10 15:20:04
【问题描述】:

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

【问题讨论】:

  • 我会检查当您单击时此代码被访问了多少次。如果您在同一对象的同一属性上同时播放两个动画,则它们可能会相互干扰。

标签: objective-c macos cocoa animation nswindow


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    • 2014-03-19
    相关资源
    最近更新 更多