Stoppen Sie eine UIView-Animation mit automatischer Reverse / unendlicher Wiederholung mit einem BOOL / Completion-Block
Ich bin einrichten die folgenden UIView animateWithDuration:
Methode, mit der Absicht, die Einstellung meiner animationOn
BOOL an anderer Stelle im Programm zu stornieren, die unendliche geloopt wiederholen. Ich hatte den Eindruck, dass die completion
block aufgerufen werden würde, jedes mal, wenn ein Zyklus der animation endet, aber dies scheint nicht der Fall zu sein.
Ist die completion
je block genannt, in einer sich wiederholenden animation? Und wenn nicht, gibt es einen anderen Weg, ich kann zu stoppen diese animation von außerhalb dieser Methode?
- (void) animateFirst: (UIButton *) button
{
button.transform = CGAffineTransformMakeScale(1.1, 1.1);
[UIView animateWithDuration: 0.4
delay: 0.0
options: UIViewAnimationOptionCurveEaseOut | UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat
animations: ^{
button.transform = CGAffineTransformIdentity;
} completion: ^(BOOL finished){
if (!animationOn) {
[UIView setAnimationRepeatCount: 0];
}
}];
}
InformationsquelleAutor der Frage Luke | 2012-12-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Abschluss-block wird nur aufgerufen, wenn die animation unterbrochen wird. Zum Beispiel wird aufgerufen, wenn die app in den hintergrund geht und kommt zurück, um den Vordergrund wieder (über multitasking). In diesem Fall wird die animation gestoppt wird. Starten Sie die animation, wenn das passiert.
Stoppen der animation können Sie entfernen Sie Sie aus dem view layer:
InformationsquelleAutor der Antwort Tom van Zummeren
Alt, aber eine weitere option.
Können Sie die Einstellungen einer anderen animation, die nicht zu wiederholen, auf die gleiche Ansicht, so können Sie auch erfassen, es im aktuellen Zustand und senden Sie es an wie es ist, indem Sie die option UIViewAnimationOptionBeginFromCurrentstate. Ihr Abschluss-block auch genannt wird.
InformationsquelleAutor der Antwort Recycled Steel
Ich habe das problem durch aufrufen
[button.layer removeAllAnimations]
.InformationsquelleAutor der Antwort Luke
Gemäß der Dokumentation des View-Klasse Referenz: Wenn Sie eine Klasse Methoden wie animateWithDuration:delay:options:animations:completion:
wenn die Dauer eingestellt ist, um negativen Wert, oder 0, die änderungen vorgenommen werden, ohne eine animation.
so Tat ich etwas, wie das zu stoppen die unendliche animation:
Ich denke, das ist besser als entfernen Sie alle Animationen aus der Ebene, wie in der Antwort vorgeschlagen.
Beachten Sie, dass dies gilt für alle anderen Klasse Methoden der animation, die in die UIView Klasse.
InformationsquelleAutor der Antwort Wael Showair