2009-02-11 8 views
8

Estoy animando una propiedad de marco de UIView utilizando CAKeyframeAnimation en el CALayer de la vista y animando la propiedad de "posición". Me gustaría poder detener la animación en su estado actual cuando el usuario toca la pantalla, pero no puedo.Detención en curso CAKeyframeAnimation

que puede detener la animación con bastante facilidad llamando

[view.layer removeAnimationForKey:kFrameAnimationKey]; 

El problema es que ni el marco de la vista no es la posición de la capa se actualizan directamente por la animación. Si miro la propiedad de posición en el momento en que se inicia la animación y cuando termina en

- (void)animationDidStop:(CAAnimation *)animation finished:(BOOL)finished 

no ha cambiado.

Parece que debe hacer eso explícitamente cuando se detiene la animación. Pero si la animación se detiene en algún punto arbitrario, no sabes qué tan lejos se ha ido. Entonces, la pregunta es cómo hacer que la animación actualice la propiedad de posición de la capa a medida que avanza, o cómo saber hasta dónde ha ido la animación cuando se detuvo.

Respuesta

21

Puede lograr esta interrupción de la animación agarrando la presentación de la capa de su animación de UIView, y luego aplicar su marco a su UIView antes de eliminar la animación. Por ejemplo:

movingView.frame = [[movingView.layer presentationLayer] frame]; 
[movingView.layer removeAnimationForKey:@"movementAnimation"]; 

Esto parece proporcionar la congelación de la UIView en la posición animada actual que está buscando.

+0

Gracias por la respuesta! parece que la clave aquí es entender qué es exactamente la capa de presentación de un CALayer en realidad. No estoy seguro de que hagan un gran trabajo al explicar eso. Todavía no estoy seguro de cuál es la capa del modelo. –

+0

La sección "Arquitectura de renderizado de animación principal" en la "Guía de programación de animación principal" tiene un buen diagrama de este concepto. Básicamente, la capa del modelo es en lo que normalmente establece los valores, y la capa de presentación es una copia de solo lectura que refleja el estado instantáneo de la capa. –

Cuestiones relacionadas