2009-07-03 3 views
5

Это, наверное, простой вопрос, но я не могу понять, как это сделать. В принципе все, что я хочу сделать, это увядает окно перед закрытием:Как дождаться окончания аниматора?

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

Это прекрасно работает без [закрытие окна], но когда это входит в окне, кажется, чтобы закрыть его до анимации отделки (очевидно, не то, что я хочу); то же самое происходит для orderOut :, performClose :, и т. д. Есть ли способ избежать этого?

ответ

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

Сообщение к currentContext должно быть -animationDuration, не -delay. – kperryua

+0

Спасибо. Я закончил с использованием этого: \t [Окно performSelector: @selector (Закрыть) \t withObject: ноль \t afterDelay: [[NSAnimationContext currentContext] продолжительность]]; – Michael

+0

D'oh! Правильно .. мой плохой. :-) – kperryua

3

Неявные анимации, запускаемые через прокси-сервер аниматора во время работы на стене. Получите длительность от текущего NSAnimationContext и выполните задержку операций очистки/пост-анимации с использованием этого интервала.

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!"); 
}]; 
Смежные вопросы