如何等待动画师完成?

时间:2009-07-03 04:46:27

标签: objective-c cocoa

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

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

没有[窗口关闭],这可以正常工作,但是当包含它时,窗口似乎在动画结束前关闭它(这显然不是我想要的); orderOut:,performClose:等似乎也是如此。有没有办法避免这种情况?

3 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:3)

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

答案 2 :(得分:3)

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

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