Sto costruendo un'applicazione iOS in cui ho un requisito per il backgroundColor della vista per l'animazione attraverso una selezione di colori. Nel mio metodo viewDidLoad fondamentalmente sto sparando una catena di animazioni UIView usando il seguente.Il modo migliore per gestire una catena di animazioni con UIViewAnimations
-(void) beginFirstStageBackgroundAnimation
{
[UIView animateWithDuration: 3.0f
delay: 3.0f
options: UIViewAnimationOptionTransitionCrossDissolve
animations:^{
self.view.backgroundColor = [UIColor colorWithRed: 251./255 green:203./255 blue:147./255 alpha:1.0];
}
completion:^(BOOL finished){
[self secondStageBackgroundAnimation];
}
];
}
Il gestore completamento spara il secondo metodo che contiene il colore successivo ....
-(void) secondStageBackgroundAnimation
{
[UIView animateWithDuration: 3.0f
delay: 3.0f
options: UIViewAnimationOptionTransitionCrossDissolve
animations:^{
self.view.backgroundColor = [UIColor colorWithRed:251./255 green:224./255 blue:96./255 alpha:1.0];
}
completion:^(BOOL finished){
[self thirdStageBackgroundAnimation];
}
];
}
E così via ... questo va avanti fino a quando nel settimo di animazione chiamo [self beginFirstStageBackgroundAnimation];
nel completamento di ricominciare il processo.
Quando lascio la vista con il pulsante Indietro, in visualizzazioneDidDisappare o quando termina il timer sul display corro [self.view.layer removeAllAnimations];
per eliminare completamente le animazioni. Tuttavia, l'app funziona e funziona esattamente come previsto, ma sembra bloccarsi dopo aver abbandonato la vista e aver funzionato per un intero e anche se non so perché ancora sembra correlato a questa catena di animazione.
C'è una soluzione migliore per animare il backgroundColor della vista ogni 3 secondi con un ritardo di 3 secondi?
E lo [self.view.layer removeAllAnimations];
fa effettivamente ciò che voglio?
EDIT: Il codice in cui lascio la vista è la seguente:
-(void) backBtnPressed:(id)sender
{
[self stopAudio]; // stop audio that is playing.
[self.view.layer removeAllAnimations]; // remove all animations?
[self.navigationController popViewControllerAnimated: YES]; // pop view from stack
}
io non sono sicuro che removeAllAnimations ferma l'animazione, è per l'animazione collegata allo strato, e non si è direttamente utilizzando l'animazione strato, ma UIView animazione ... in ogni caso non dovrebbe bloccarsi, si potrebbe chiamare anche senza chiamare alcuna animazione. qual è il tuo registro dopo un incidente? – meronix
+1 il vero pericolo qui è liquidare la pila in un ciclo ogni tre secondi - fondamentalmente una grande ricorsione lenta. la risposta che hai accettato lo evita, così come il mio. sono sicuro che la risposta accettata va bene, anche se è mia preferenza attaccare con blocchi ovunque sia possibile. – danh