Die beste Methode, um eine Kette von Animationen mit UIViewAnimations zu verwalten

8

Ich bin eine iOS-Anwendung, in der ich eine Anforderung für die backgroundColor der Ansicht zur Animation durch eine Auswahl von Farben habe. In meiner ViewDidLoad-Methode feuere ich grundsätzlich eine Kette von UIView-Animationen mit den folgenden.

%Vor%

Der Beendigungshandler löst die zweite Methode mit der nächsten Farbe aus ....

%Vor%

Und so weiter ... das geht weiter, bis ich in der siebten Animation [self beginFirstStageBackgroundAnimation]; in der Vervollständigung anrufe, um den Prozess erneut zu beginnen.

Wenn ich die Ansicht mit der Zurück-Taste verlasse, in viewDidDisappear oder wenn der Timer auf dem Display endet, führe ich [self.view.layer removeAllAnimations]; aus, um die Animationen komplett loszuwerden. Allerdings läuft und funktioniert die App genau wie beabsichtigt, aber scheint nach dem Verlassen der Ansicht und dem Laufen für ein Ganzes abzustürzen, und obwohl ich nicht weiß, warum es noch mit dieser Animationskette verbunden scheint.

Gibt es eine bessere Lösung, um die backgroundColor der Ansicht alle 3 Sekunden mit einer Verzögerung von 3 Sekunden zu animieren?

Und macht [self.view.layer removeAllAnimations]; tatsächlich was ich will?

EDIT: Der Code, wo ich die Ansicht verlasse, ist wie folgt:

%Vor%     
Paul Morris 22.03.2013, 16:17
quelle

3 Antworten

5

Sie können versuchen, CAAnimation zu verwenden. Ich denke, es wird Ihnen leichter fallen, Farben und Animationen zu verwalten

%Vor%     
Sergey Kuryanov 22.03.2013, 16:42
quelle
7

Ich denke, der Weg zu gehen ist, darzustellen, was Sie in jeder Animation parametrisch passieren wollen (was in diesem Fall nur eine Farbe ist), und diese Parameter dann in einem Array zu behalten. Das Array ist wie Ihre To-Do-Liste für Animationen:

%Vor%

Wir müssen auch verfolgen, wo wir in der Liste sind. Verwenden Sie eine eingerahmte (NS) Zahl, so dass wir "nicht animieren" als Null darstellen können, das sich von Index Null unterscheidet:

%Vor%

Das Array wird mit Farben initialisiert:

%Vor%

Jetzt kann die Animation auf eine einzige Methode komprimiert werden:

%Vor%

Selektor ausführen, geben Sie die Verzögerung an und hat außerdem den positiven Effekt, dass Sie den Stapel nicht jedes Mal aufwickeln, wenn Sie die nächste Animation starten.

Das Stoppen ist jetzt auch einfach. Tun Sie dies, bevor die Ansicht verschwindet und zu jeder anderen Zeit, die Sie aufhören möchten.

%Vor%     
danh 22.03.2013 17:14
quelle
-1

Versuchen Sie, in jeder Animationsmethode ein Häkchen zu setzen:

%Vor%

Könnten Sie den Code dort posten, wo Sie "die Ansicht mit der Zurück-Schaltfläche verlassen"? Das Problem könnte da sein ...

    
meronix 22.03.2013 16:37
quelle