如何等待动画完成?

5

这可能是一个简单的问题,但我似乎无法弄清楚如何做到。基本上,我想做的就是在关闭窗口之前淡出它:

[[window animator] setAlphaValue:0.0];
[window close];

没有使用 [window close] 时,这个程序可以正常运行,但是当加入该语句后,窗口似乎会在动画未完成时关闭(显然这不是我想要的);同样的情况也发生在 orderOut:、performClose: 等方法中。有没有什么办法可以避免这种情况?

3个回答

8
[[window animator] setAlphaValue:0.0];
[window performSelector:@selector(performClose:) withObject:self afterDelay:[[NSAnimationContext currentContext] duration]];

当前上下文的消息应该是-animationDuration,而不是-delay。 - kperryua
谢谢。我最终使用了这个:[window performSelector:@selector(close) withObject:nil afterDelay:[[NSAnimationContext currentContext] duration]]; - Michael
感谢kperryua和Michael。我已经修正了答案。 - Tom Dalling

4

这是一个旧的(但仍然很受欢迎)问题,其答案已经过时。

等待动画结束的正确方法是使用特殊的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!");
}];

3
通过动画代理触发的隐式动画在墙上时间运行。从当前的NSAnimationContext获取持续时间,并使用该间隔执行延迟清理/后动画操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接