Ich führe diese Animation bei einer Benutzerinteraktion aus, und manchmal kann die Animation erneut ausgeführt werden, bevor die laufende Animation beendet ist. Was ich möchte, ist, die vorherige Animation abzubrechen und mit der neuen fortzufahren.UIView animateWithDuration Abschluss ist abgeschlossen = JA obwohl abgebrochen?
[UIView animateWithDuration:duration
delay:0
options:UIViewAnimationOptionBeginFromCurrentState
animations:^{
self.bounds = bounds;
}
completion:^(BOOL finished) {
if (finished) {
// Do some cleanup after animating.
}
}];
Optisch scheint dies zu funktionieren, aber in meinem Abschluss Block mir gesagt wurde, dass es in beiden Fällen abgeschlossen, die der Bereinigungscode verursacht vorzeitig laufen. Der Completion-Block der ersten Animation wird also unmittelbar nach dem Start der zweiten Animation ausgeführt, wobei finished = YES
. Ich erwartete, dass es einen fertigen Wert von NO
hat und der zweite (sobald es fertig ist), YES
zu haben.
Gibt es eine Möglichkeit zu wissen, ob die Animation abgeschlossen wurde oder ob sie durch eine andere abgebrochen wurde?
Nebenbei bemerkt: Ich habe versucht, die gleiche Animation mit CABasicAnimation
tun und dann fertige ich = NO
das erste Mal und YES
das zweite Mal, so das Verhalten Ich scheint immer zu animateWithDuration
spezifisch zu sein.
Hier ist ein GIF zeigt den obigen Code in Aktion mit einer Dauer von 10 und der Abschluss-Block aktualisiert die Bezeichnung. Wie Sie sehen können, finished
ist YES
die Animation jedes Mal mit dem animateWithDuration
Aufruf neu gestartet wird:
Danke, das half mir, meine Animationsfehler zu beheben, die immer auf iOS 9 beendet sind. – malhal
Eigentlich ist ein besserer Weg, die Grenzen der Präsentationsschicht zu überprüfen, dann weißt du, ob es fertig ist oder nicht. – malhal
Das habe ich auch gemacht (iOS 9.3, Swift)! Danke für die Hilfe. –