这可能是一个简单的问题,但我似乎无法弄清楚如何做到。基本上,我想做的就是在关闭窗口之前淡出它:
[[window animator] setAlphaValue:0.0];
[window close];
没有使用 [window close] 时,这个程序可以正常运行,但是当加入该语句后,窗口似乎会在动画未完成时关闭(显然这不是我想要的);同样的情况也发生在 orderOut:、performClose: 等方法中。有没有什么办法可以避免这种情况?
这可能是一个简单的问题,但我似乎无法弄清楚如何做到。基本上,我想做的就是在关闭窗口之前淡出它:
[[window animator] setAlphaValue:0.0];
[window close];
没有使用 [window close] 时,这个程序可以正常运行,但是当加入该语句后,窗口似乎会在动画未完成时关闭(显然这不是我想要的);同样的情况也发生在 orderOut:、performClose: 等方法中。有没有什么办法可以避免这种情况?
[[window animator] setAlphaValue:0.0];
[window performSelector:@selector(performClose:) withObject:self afterDelay:[[NSAnimationContext currentContext] duration]];
这是一个旧的(但仍然很受欢迎)问题,其答案已经过时。
等待动画结束的正确方法是使用特殊的NSAnimationContext
类方法,并使用completionHanler
,像这样:
[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context){
// Start some animations here.
[[window animator] setAlphaValue:0.0];
} completionHandler:^{
// This block will be invoked when all of the animations started above have completed or been cancelled.
NSLog(@"All done!");
}];