Ich arbeite an Code für eine erweiterbare Tray-Ansicht, die UIDynamicAnimator verwendet, um eine schöne Expand/Contract-Animation zu erzielen.UIDynamicAnimator verweigert den Ausgleich, wenn ein UIGravityBehavior aktiv ist
Um eine realistische Beschleunigung zu erreichen, verwende ich UIGravityBehavior
, um mein Fach fallen zu lassen, bis der "Vorsprung" des Fachs den unteren Rand des Bildschirms trifft.
Das funktioniert gut, aber obwohl alle Elemente in der Szene nicht mehr bewegt werden, wird UIDynamicAnimatorDelegate dynamicAnimatorDidPause:
nie aufgerufen. Dies bedeutet, dass der Animator weiterhin CPU-Zyklen verwendet, um die Szene zu animieren (der Delegat ist festgelegt und wird für UIDynamicAnimatorDelegate dynamicAnimatorDidPause:
ausgelöst).
Ich habe versucht, die UIGravityBehavior
aus der Szene entfernen, die in der Tat den Animator am Ende zu stoppen verursacht. Ich kann die Entfernung des Gravitationsverhaltens jedoch nicht zeitgesteuert durchführen, da ich es von der Szene entfernen muss, sobald sich alles nicht mehr bewegt.
Ich verstehe, dass die Schwerkraft eine konstante Kraft ist, aber ich nahm immer noch an, dass es den Animator stoppen würde, sobald alles 0 Geschwindigkeit und 0 Beschleunigung hat.
Ist diese letzte Annahme falsch?
Wer hat ähnliche Probleme?
Jedem, der dies liest: Ich könnte die Lösung gefunden haben. Ich habe es noch nicht getestet, aber ich stieß auf das gleiche Problem in einer anderen Situation: Ich habe den UIDynamicAnimator updateItemUsingCurrentState in einem Animationsblock verwendet. Dies war in meiner TrayView-Klasse nicht der Fall, aber ich dachte mir, dass diese Erkenntnis den Menschen in Zukunft helfen könnte. Wenn ich Zeit habe, werde ich versuchen, meine Verwendung des updateItemUsingCurrentState zu überprüfen und zu sehen, ob ich das Problem in meiner TrayView-Klasse verhindern kann. – Nailer