所以,我有以下代码来展示我的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
获取状态栏图标位置的原因。 />
这段代码运行得很完美,但有时候,它非常迟钝而且很快就会出现问题。我不知道为什么。
有关于此的任何想法以及如何解决它?
答案 0 :(得分:4)
NSWindow
动画师使用NSAnimation
,这意味着它会快速触发计时器以设置窗口框架的动画。在动画的每个帧中,窗口内的每个视图都会重新绘制。如果您的视图层次结构有些复杂,那么性能非常差,并且没有真正的解决方法。
我建议JNWAnimatableWindow替代默认的NSWindow
动画师,因为它使用核心动画CALayer
来执行动画,因此更加流畅。