He buscado un montón de cosas SO y en las referencias de Apple, pero todavía no puedo gestionar mi problema.
Lo que tengo:
- Una pantalla con 2
UIImageView
sy 2UIButton
s conectados a ellos - 2 tipos de animación:
- Ampliación y reducción de cada imagen, una tras otra, solo una vez en
viewDidLoad
- Cuando se presiona un botón (un botón personalizado oculto "dentro" de cada uno
UIImageView
), se activa la animación correspondienteUIImageView
, solo uno, no ambos (también escala hacia arriba y luego hacia abajo). - Mientras escribo para iOS4 +, ¡me han dicho que use animaciones basadas en bloques!
- Ampliación y reducción de cada imagen, una tras otra, solo una vez en
Lo que necesito:
¿Cómo cancelo una animación en ejecución? Me las arreglé para cancelar después de todos menos el último ...: /
Aquí está mi fragmento de código:
[UIImageView animateWithDuration:2.0
delay:0.1
options:UIViewAnimationOptionAllowUserInteraction
animations:^{
isAnimating = YES;
self.bigLetter.transform = CGAffineTransformScale(self.bigLetter.transform, 2.0, 2.0);
} completion:^(BOOL finished){
if(! finished) return;
[UIImageView animateWithDuration:2.0
delay:0.0
options:UIViewAnimationOptionAllowUserInteraction
animations:^{
self.bigLetter.transform = CGAffineTransformScale(self.bigLetter.transform, 0.5, 0.5);
} completion:^(BOOL finished){
if(! finished) return;
[UIImageView animateWithDuration:2.0
delay:0.0
options:UIViewAnimationOptionAllowUserInteraction
animations:^{
self.smallLetter.transform = CGAffineTransformScale(self.smallLetter.transform, 2.0, 2.0);
} completion:^(BOOL finished){
if(! finished) return;
[UIImageView animateWithDuration:2.0
delay:0.0
options:UIViewAnimationOptionAllowUserInteraction
animations:^{
self.smallLetter.transform = CGAffineTransformScale(self.smallLetter.transform, 0.5, 0.5);
}
completion:^(BOOL finished){
if (!finished) return;
//block letter buttons
[self.bigLetterButton setUserInteractionEnabled:YES];
[self.smallLetterButton setUserInteractionEnabled:YES];
//NSLog(@"vieDidLoad animations finished");
}];
}];
}];
}];
De alguna manera el smallLetter
UIImageView
no funciona correctamente, porque cuando se presiona (a través del botón) bigLetter
se cancelan las animaciones correctamente ...
EDITAR:
He usado esta solución, pero todavía tengo problemas con la reducción smallLetter
UIImageView
, sin cancelar en absoluto ...
solución
EDIT2: agregué esto al comienzo de los métodos next / prev:
- (void)stopAnimation:(UIImageView*)source {
[UIView animateWithDuration:0.01
delay:0.0
options:(UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionAllowUserInteraction)
animations:^ {
source.transform = CGAffineTransformIdentity;
}
completion:NULL
];
}
el problema permanece ...: / no tengo idea de cómo interrumpir la última animación de las letras en la cadena de animación