Jestem zbudować aplikację iOS, w której mam wymaganie background.Color widoku do animacji poprzez wybór kolorów. W mojej metodzieDidLoad zasadniczo rozpalam łańcuch animacji UIView używając następujących.Najlepszy sposób na obsługę łańcucha animacji za pomocą 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];
}
];
}
Handler ukończenie odpala drugą metodę zawierającą kolejny kolor ....
-(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];
}
];
}
I tak dalej ... to idzie dalej, aż w siódmym animacji nazywam [self beginFirstStageBackgroundAnimation];
w celu zakończenia rozpocznij ponownie proces.
Po opuszczeniu widoku za pomocą przycisku Wstecz, w widokuDidDisappear lub gdy timer na wyświetlaczu się kończy, uruchamiam [self.view.layer removeAllAnimations];
, aby całkowicie pozbyć się animacji. Jednak aplikacja działa i działa dokładnie zgodnie z przeznaczeniem, ale wydaje się, że po przełączeniu się z widoku i uruchomieniu na całość wygląda na awarię i chociaż nie wiem dlaczego, wydaje się być związana z tym łańcuchem animacji.
Czy istnieje lepsze rozwiązanie do animowania tła tła widoku co 3 sekundy z 3-sekundowym opóźnieniem?
A czy [self.view.layer removeAllAnimations];
faktycznie robi to, co chcę?
EDIT: Kod gdzie mogę zostawić pogląd jest następujący:
-(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
}
nie jestem pewien, że removeAllAnimations zatrzymuje animację, to dla animacji dołączonej do warstwy, a nie są bezpośrednio za pomocą animacji warstwy, ale animacja UIView ... i tak nie powinien upaść, można to nazwać nawet bez wywoływania żadnej animacji. jaki jest twój dziennik po awarii? – meronix
+1 Prawdziwym niebezpieczeństwem tutaj jest zwijanie stosu w pętlę co trzy sekundy - w zasadzie duża powolna rekursja. odpowiedź, którą zaakceptowałeś, unika tego, podobnie jak moja własna. Jestem pewna, że zaakceptowana odpowiedź jest w porządku, chociaż wolę trzymać się bloków, gdzie tylko to możliwe. – danh