2009-07-03 22 views
5

Esta es probablemente una pregunta simple, pero parece que no puedo entender cómo hacerlo. Básicamente todo lo que quiero hacer es desaparecer una ventana antes de cerrarla:¿Cómo esperar a que termine un animador?

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

Esto funciona bien sin el [cerrar la ventana], pero cuando que se incluye la ventana parece cerrarla antes de que finalice la animación (que obviamente no es lo que quiero); lo mismo parece suceder con orderOut :, performClose :, etc. ¿Hay alguna forma de evitar esto?

Respuesta

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

El mensaje a la CurrentContext debe ser -animationDuration, no -delay. – kperryua

+0

Gracias. Terminé usando esto: \t [ventana performSelector: @selector (cerrar) \t withObject: cero \t afterDelay: [[NSAnimationContext CurrentContext] duración]]; – Michael

+0

D'oh! Eso es correcto ... mi mal. :-) – kperryua

3

Animaciones implícitas activadas a través del proxy del animador ejecutado en el tiempo de pared. Obtenga la duración del NSAnimationContext actual y realice el retraso de las operaciones de limpieza/post-animación usando ese intervalo.

3

Esta es una pregunta antigua (pero todavía popular) con respuesta obsoleta.

La forma correcta de esperar a que termine el animador está utilizando el método de la clase NSAnimationContext Especial con completionHanler así:

[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!"); 
}]; 
Cuestiones relacionadas