Mit Core Animation, ist es eine Möglichkeit, Gruppe Animationen für mehrere CALayers?

StackOverflow https://stackoverflow.com/questions/418419

  •  03-07-2019
  •  | 
  •  

Frage

Ich habe eine Situation, wo ich viele CALayers habe, die in einer „Turn based“ Art und Weise zu animieren. Ich animieren die Position auf jedem dieser CALayers, aber sie haben genau die gleiche Dauer. Sobald alle diese CALayers fertig sind belebende, eine neue „Wende“ eingeleitet wird und sie animieren wechselnden Positionen wieder.

Die ganze Idee ist, dass mit einer linearen Interpolation zwischen den Positionen und mit einer konstanten Geschwindigkeit, ein rundenbasiertes Übergang zwischen Staat zu Staat wie eine Echtzeit-Animation aussieht. Dies ist jedoch nur schwer mit vielen verschiedenen CALayers zu erreichen.

CAAnimationGroup wird zu einer Gruppe zusammen Animationen auf einem einzigen CALayer verwendet. Aber ich frage mich, ist es eine einfache Lösung zur Gruppe Animationen, die angeblich die gleichen Laufzeiten haben, auf mehr CALayers zusammen?

Edited eine Antwort auf Kevin Ballard Frage schließen

Mein Problem liegt darin. Ich erstelle Animationen für jeden meiner CALayers, dann setzen die in einer NSArray. Sobald ich den Rückruf erhalten, dass die einzelne Animation beendet ist, entferne ich den NSArray bilden. Wenn es leer ist, erstelle ich wieder Animationen für sie alle.

Mit mehr als ein paar Schichten gibt es eine merkliche Verzögerung zwischen dem alle Animationen abgeschlossen und die neuen beginnen.

Ich stelle mir vor, dass, wenn ich Gruppe zu einem einzigen all diese Animationen könnte, könnte viel mehr Schichten ohne Verzögerung zwischen Animationen animiert werden. Dabei nicht die Illusionen einer zusammenhängenden Animation zu ruinieren.

War es hilfreich?

Lösung

Wenn Sie Animationen auf mehrere CALayers innerhalb einer einzigen Methode befestigen, werden sie alle beginnen bei (effektiv), um die gleiche Zeit. Ich benutze diesen Ansatz in einem Puzzle-Spiel mit Kugeln, am Ende der Animationen fallen ich die nächste Stufe der Animation zu jedem Ball anhängen, die weitere Animation benötigt.

Ich bin bis zu 60 CALayers zu einem Zeitpunkt, zu animieren und keine Verzögerungen zwischen den Stufen der Animation erlebt, aber ich cachen nicht die Animationen in einer Reihe von jeglicher Art, bin ich von thge Kopf Sie es nicht sicher haben .

Meine Animationen sind relativ einfach, und erstellt und jeden CALayer on the fly angebracht. Meine Sprites sind 60px Platz und verwenden ein paar Dutzend mögliche Bilder deren Inhalt darzustellen.

In einigen Fällen gibt es mehrfach Animationen, die ich mit unterschiedlichen Startzeiten (mit Begintime) erstellen kann ich sie mit einem CAAnimationGroup bündeln -. Sie können jedoch nicht in der Lage sein nachfolgenden Animationen vorauszuberechnen

Andere Tipps

Wenn Sie Ihre Animationen in einem CATransaction wickeln, wird CG stellen Sie sicher, dass sie alle in der gleichen Iteration der Hauptschleife ausgeführt werden.

[CATransaction beginnen]; // alle Animationen [CATransaction begehen];

Wenn Sie fügen Sie 3 Animationen zu 3 verschiedenen Ebenen, die alle zur gleichen Zeit, und sie haben die gleiche Dauer, würde ich erwarten, dass sie alle zusammen animieren. Welches Verhalten sehen Sie?

cp21yos: Sie können auf Ihrer Methode näher erläutern? Ich versuche, etwas ähnliches zu tun, die zu einer Zeit mehr Schichten umfassen Animieren, mehr als einmal. Sie sagte: „am Ende der Animationen ich die nächste Stufe der Animation anhängen“. Kannst du das erklären? Wenn ich versuche, Logik zu setzen zusätzliche Animationen in einer animationDidStop Veranstaltung durchzuführen, nur die letzte Animation auftritt, statt der gesamten Sequenz von Animationen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top