Ho lo stesso problema; le API non hanno nulla di annullare qualche animazione specifica. Il
+ (void)setAnimationsEnabled:(BOOL)enabled
disabilita tutte le animazioni, e quindi non funziona per me. Ci sono due soluzioni:
1) rendere il vostro animata oggetto una visualizzazione secondaria. Poi, quando si desidera annullare le animazioni per quella vista, rimuovere la vista o nasconderlo. Molto semplice, ma è necessario ricreare la visualizzazione secondaria senza animazioni se è necessario tenerlo in vista.
2) ripetere l'anim sola, e fare un selettore delegato per riavviare l'Anim, se necessario, in questo modo:
-(void) startAnimation {
NSLog(@"startAnim alpha:%f", self.alpha);
[self setAlpha:1.0];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
[UIView setAnimationRepeatCount:1];
[UIView setAnimationRepeatAutoreverses:YES];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(pulseAnimationDidStop:finished:context:)];
[self setAlpha:0.1];
[UIView commitAnimations];
}
- (void)pulseAnimationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
if(hasFocus) {
[self startAnimation];
} else {
self.alpha = 1.0;
}
}
-(void) setHasFocus:(BOOL)_hasFocus {
hasFocus = _hasFocus;
if(hasFocus) {
[self startAnimation];
}
}
Problemi con 2) è che c'è sempre ritardo di stop Anim come termina il ciclo di animazione corrente.
Spero che questo ti aiuti.