Mam ten sam problem; API nie mają nic do odwołania jakąś specyficzną animację.
+ (void)setAnimationsEnabled:(BOOL)enabled
Wyłącza wszystkie animacje, a tym samym nie działa dla mnie. Są dwa rozwiązania:
1) dokonać animowany obiekt podrzędny. Potem, gdy chcesz zrezygnować z animacji dla tego widoku, należy usunąć widok lub ukryć. Bardzo proste, ale trzeba odtworzyć podrzędny bez animacji, jeśli trzeba trzymać go w polu widzenia.
2) powtórzyć anim tylko jeden, i dokonać wyboru delegata, aby ponownie uruchomić anim razie potrzeby, na przykład:
-(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];
}
}
Problem z 2) jest to, że zawsze opóźnić zatrzymanie anim gdyż zakończy bieżący cykl animacji.
Mam nadzieję że to pomoże.