animate ios uiview uianimation quartz-core

ios - animate - core animation



cancelar una animaciĆ³n UIViewWithDuration antes de finalizar (3)

Actualización: prefiera esta respuesta https://stackoverflow.com/a/21527129/194309 de Borut Tomazin

Tengo este código en mi proyecto:

- (void) fadeImageView { [UIView animateWithDuration:1.0f delay:0 options:UIViewAnimationCurveEaseInOut animations:^{ self.imageView.alpha = 0.0f; } completion:^(BOOL finished) { //make the image view un-tappable. //if the fade was canceled, set the alpha to 1.0 }]; }

sin embargo, hay circunstancias en las que me gustaría cancelar esta operación antes de que la vista de imagen se haya vuelto invisible. ¿Hay alguna forma de cancelar esta animación a media animación?


En primer lugar, debe agregar UIViewAnimationOptionAllowUserInteraction a la opción como ...

- (void) fadeImageView { [UIView animateWithDuration:1.0f delay:0 options:UIViewAnimationCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction animations:^{ self.imageView.alpha = 0.0f; } completion:^(BOOL finished) { //make the image view un-tappable. //if the fade was canceled, set the alpha to 1.0 }]; }

y luego hacer un método como este ....

-(void)stopAnimation { [self.routeView.layer removeAllAnimations]; }

después de eso, cuando desee eliminar su método de llamada de animación anterior utilizando .....

[self performSelectorOnMainThread:@selector(stopAnimation) withObject:nil waitUntilDone:YES];

Espero que te ayude

Feliz codificación ......... !!!!!!!!!!!! :)

EDITAR:

Gracias usuario1244109 para guiarme por esto.

Para iOS7 tenemos que agregar una opción más UIViewAnimationOptionBeginFromCurrentState como:

[UIView animateWithDuration:1.0f delay:0 options:UIViewAnimationCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionBeginFromCurrentState animations:^{ self.imageView.alpha = 0.0f; } completion:^(BOOL finished) { //make the image view un-tappable. //if the fade was canceled, set the alpha to 1.0 }];


De los documentos de Apple: el uso de este método no se recomienda en iOS 4.0 y versiones posteriores. En su lugar, debe usar el animateWithDuration:delay:options:animations:completion: para especificar sus animaciones y las opciones de animación .:

[UIView animateWithDuration:1.f delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{ self.imageView.alpha = 0.0f; } completion:NULL];