Abbrechen einer UIView-Animation?
Ist es möglich zu stornieren UIView
animation während es im Gange ist? Oder müsste ich ablegen, um die CA-Ebene?
also ich habe auch schon sowas gemacht (vielleicht die Einstellung einer animation beenden-Aktion):
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:duration];
[UIView setAnimationCurve: UIViewAnimationCurveLinear];
//other animation properties
//set view properties
[UIView commitAnimations];
Aber bevor die animation abgeschlossen ist und ich die animation endete die Veranstaltung, die ich kündigen möchte es (kurz gesagt). Ist das möglich? Googeln um, findet man ein paar Leute Fragen die gleiche Frage mit Nein Antworten - und ein oder zwei Leute spekulieren, dass es nicht getan werden kann.
InformationsquelleAutor der Frage philsquared | 2009-02-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Weise, die ich tun, es ist eine neue animation erstellen zu Ihrem Endpunkt. Eine sehr kurze Dauer und stellen Sie sicher, dass Sie die
+setAnimationBeginsFromCurrentState:
Methode zum starten vom aktuellen Zustand. Wenn du es auf JA, wird die aktuelle animation ist kurz geschnitten. Sieht ungefähr so aus:InformationsquelleAutor der Antwort Stephen Darlington
Verwenden:
InformationsquelleAutor der Antwort Jim Heising
Einfachste Weg zu stoppen alle Animationen auf eine bestimmte Ansicht, sofortist dies:
Link das Projekt zu QuartzCore.Rahmen. Am Anfang des Codes:
Nun, wenn Sie wollen, zu stoppen Sie alle Animationen auf einen Blick, tot in Ihren tracks sagen:
Mittleren Linie würde die Arbeit ganz von selbst, aber es gibt eine Verzögerung, bis die runloop beendet (die "redraw moment"). Um zu verhindern, dass eine Verzögerung, wickeln Sie den Befehl in eine explizite Transaktion zu blockieren, wie gezeigt. Dies funktioniert soweit keine anderen änderungen durchgeführt wurden, die auf dieser Ebene in der aktuellen runloop.
InformationsquelleAutor der Antwort matt
Auf iOS 4 und höher, verwenden Sie die
UIViewAnimationOptionBeginFromCurrentState
option auf die zweite animation zu schneiden die erste animation kurz.Als Beispiel nehme an, Sie haben eine Sicht, eine Aktivitätsanzeige. Sie möchten zu verblassen in der Aktivitätsanzeige während einige potenziell zeitaufwändige Tätigkeit beginnt, und fade es aus, wenn die Aktivität beendet ist. In dem code unten, wird die Ansicht mit der Aktivitätsanzeige heißt es
activityView
.InformationsquelleAutor der Antwort Ville Laurikari
Abbrechen einer animation, die Sie einfach brauchen, um die Eigenschaft, die gerade animiert, außerhalb der UIView animation. Das wird verhindern, dass die animation, wo es ist, und die UIView springt zu der Einstellung, die Sie gerade definiert haben.
InformationsquelleAutor der Antwort tomtaylor
Wenn Euch animieren möchten, eine Einschränkung durch ändern der Konstante statt einer view-Eigenschaft keine der anderen Methoden funktioniert auf iOS 8.
Beispiel animation:
Lösung:
Müssen Sie entfernen Sie die Animationen aus den Schichten von Ansichten betroffen von der Einschränkung ändern und Ihre Unterebenen.
InformationsquelleAutor der Antwort Nikola Lajic
Sorry wiederzubeleben, diese Antwort, aber in iOS 10 Sachen ein bisschen geändert, und jetzt stornieren ist möglich und Sie können sogar Abbrechen anmutig!
Nachdem iOS 10 stornieren können Sie Animationen mit UIViewPropertyAnimator!
Wenn Sie true übergeben, er hebt die animation und es hält, wo Sie es abgebrochen. Die completion-Methode nicht aufgerufen werden. Allerdings, wenn Sie falsch Sie sind verantwortlich für die Weiterverarbeitung der animation:
Können Sie beenden Sie Ihre animation und bleiben im aktuellen Zustand (.Strom) oder gehen Sie auf den Ausgangszustand (.start) oder auf den Endzustand (.Ende)
Durch die Art und Weise, können Sie sogar unterbrechen und später neu starten...
Hinweis: Wenn Sie nicht möchten, dass ein abruptes Abbrechen können Sie rückgängig machen, die animation, oder sogar ändern Sie die animation, nachdem Sie ihn anhalten!
InformationsquelleAutor der Antwort Tiago Almeida
Wenn Sie nur wollen, um zu pausieren/stoppen Sie die animation reibungslos
Quelle: Wie zum anhalten der animation eine Ebene Baum
InformationsquelleAutor der Antwort Victor M
Keiner der oben gelöst es für mich, aber das half: Die
UIView
animation wird die Eigenschaft sofort, dann belebt es. Es Stoppt die animation, wenn Sie die Präsentations-Schicht entspricht dem Modell (set-Eigenschaft).Ich mein Problem gelöst, das war "ich will animieren, aus denen Sie schauen, wie Sie erscheinen" ('Euch', die Bedeutung der anzeigen). Wenn Sie DAS wollen, dann:
CALayer * pLayer = theView.layer.presentationLayer;
legen Sie die position der presentation layer
Ich mit ein paar Optionen, einschließlich
UIViewAnimationOptionOverrideInheritedDuration
Sondern weil die Apple-Dokumentation ist vage, ich weiß nicht, ob es wirklich überschreibt die anderen Animationen, wenn verwendet, oder nur Timer zurückgesetzt.
Sein sollte, eine anständige Lösung für jetzt.
InformationsquelleAutor der Antwort NazCodezz
InformationsquelleAutor der Antwort ideawu
Ich habe das gleiche problem; die APIs haben nichts zu stornieren einige spezielle animation. Die
+ (void)setAnimationsEnabled:(BOOL)enabled
deaktiviert ALLE Animationen, und damit funktioniert bei mir nicht. Es gibt zwei Lösungen:
1) stellen Sie das animierte Objekt eine Untersicht. Dann, wenn Sie stornieren möchten, die Animationen für die Ansicht, entfernen Sie die anzeigen oder verbergen. Sehr einfach, aber Sie müssen wieder die Untersicht ohne Animationen, wenn Sie müssen, halten Sie es im Blick.
2) wiederholen Sie die anim nur ein, und machen Sie einen Delegaten Selektor zum starten der Animation, wenn nötig, wie diese:
Problem 2) ist, dass es immer Verzögerung stoppen die anim als Ende der aktuellen animation Zyklus.
Hoffe, das hilft.
InformationsquelleAutor der Antwort
Selbst wenn Sie Abbrechen, wird die animation in die Wege, über animation
didStopSelector
noch läuft. Also, wenn Sie haben Logik-Staaten in Ihrer Anwendung angetrieben durch Animationen werden Sie Probleme haben. Grund dafür sind die oben beschriebene Weise habe ich die Kontext-variableUIView
Animationen. Wenn Sie den aktuellen Zustand des Programms, indem Sie die context-param, um die animation, wenn die animation Stoppt IhredidStopSelector
Funktion kann entscheiden, ob er etwas tun sollte oder einfach nur wieder auf der Grundlage der gegenwärtigen Staat und der übergebene Wert als Kontext.InformationsquelleAutor der Antwort Gorky
InformationsquelleAutor der Antwort Thunder Rabbit
Zum anhalten einer animation ohne Rückgriff Zustand auf original oder endgültig:
InformationsquelleAutor der Antwort tommybananas
Swift version von Stephen Darlington ist die Lösung
InformationsquelleAutor der Antwort lucamegh