2012-09-15 7 views
9

Tengo una Animación UIView activada que necesito cancelar en mi aplicación iOS. He intentado esto:Cancelando UIView Animation - self.view.layer removeAllAnimations no funciona

[self.view.layer removeAllAnimations]; 

Pero no funcionó. La animación continuó. Aquí está mi código de animación:

[UIView animateWithDuration:1.4 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ 
recognizer.view.transform = CGAffineTransformTranslate(recognizer.view.transform, translation.x, translation.y); 
} completion:^(BOOL finished) { 

      NSLog(@"completed animation, now do whatever"); 
     }]; 

¿Alguien tiene alguna idea de por qué no está funcionando?

+2

está agregando que la animación al reconocedor de vista, por lo tanto, tendrá que sacarlo de la capa de ese mismo punto de vista. Por lo tanto, en lugar de [self.view.layer removeAllAnimations], es posible que desee [recognizer.view.layer removeAllAnimations]. – Till

+1

Hola. Gracias - algo está sucediendo ahora, pero eso introduce otro problema. Lleva la animación hasta el final deteniéndola instantáneamente allí. Quiero que se detenga en su posición actual, la posición en la que está cuando quiero detener la animación, no saltar al final. ¿Se puede hacer esto así? –

+2

Echa un vistazo a 'recognizer.view.layer.presentationLayer'. Tendrá la transformación del medio, simplemente ajústelo a la capa actual: 'recognizer.view.layer.transform = recognizer.view.layer.presentationLayer.transform;' ... Podría necesitar más trabajo. – Mazyod

Respuesta

10

Está agregando esa animación a la vista del reconocedor, por lo tanto, tendrá que quitarla de la capa de esa misma vista.

Así que en lugar de

[self.view.layer removeAllAnimations]; 

es posible que desee

[recognizer.view.layer removeAllAnimations]; 

Y para mantener el estado actual de la transformación, ir a buscar que uno de la capa de presentación. La capa de presentación es la que realmente refleja los cambios durante la animación.

recognizer.view.layer.transform = recognizer.view.layer.presentationLayer.transform; 
+1

Gracias por el primer problema 2. Problema con la última sección para mantener el estado . Obtenga este error: "Propiedad 'transformar' no encontrada en el objeto de tipo 'id'" –

3

Ok - acabo de descubrirlo. Se cambió el componente beng animado desde el reconocedor de gestos en la parte superior de la vista de la imagen a la vista de la imagen misma. Ahora, justo antes del código para detener la animación, tengo:

truckView.frame = [[trackView.layer presentationLayer] frame]; 
[truckView.layer removeAllAnimations]; 

Así que esta es la manera de hacerlo. Gracias por la ayuda que me llevó a esta respuesta,

Sam

+0

Estoy usando esto pero empiezo a pensar porque se obtiene el marco antes de eliminar todas las animaciones, la animación realmente continúa un poco y el marco que se estableció está desactualizado – MobileMon