2009-01-06 12 views
5

Mam sytuację, w której mam wiele CALayerów, które animują w stylu "turowym". Animuję pozycję każdego z tych CALayerów, ale mają one dokładnie taki sam czas trwania. Po zakończeniu animacji przez wszystkie CALayery rozpoczyna się nowy "zwrot" i ponownie animują zmianę pozycji.Korzystanie z Core Animation, czy istnieje sposób grupowania animacji dla kilku CALayerów?

Cała idea polega na tym, że w przypadku liniowej interpolacji między pozycjami i ze stałą prędkością, zwrotne przejście między stanem a stanem wygląda jak animacja w czasie rzeczywistym. Jest to jednak trudne z wieloma różnymi CALayers.

CAAnimationGroup służy do grupowania animacji na jednej CALayerze. Ale zastanawiałem się, czy istnieje proste rozwiązanie dla grup animacji, które mają mieć te same czasy trwania, na kilku CALayers razem?

Edited zawierać odpowiedź na pytanie Kevin Ballarda

Mój problem tkwi w tym. Tworzę animacje dla każdego z moich CALayerów, a następnie umieszczam je w NSArray. Gdy otrzymam wywołanie zwrotne, które zakończyła pojedyncza animacja, usuwam ją z NSArray. Gdy jest pusty, ponownie tworzę animacje dla nich wszystkich.

W przypadku kilku warstw widoczna jest przerwa między zakończeniem wszystkich animacji a rozpoczęciem nowych.

Wyobrażam sobie, że gdybym mógł zgrupować wszystkie te animacje w jeden, o wiele więcej warstw może być animowanych bez opóźnień między animacjami. Nie rujnując złudzeń ciągłej animacji.

Odpowiedz

5

Jeśli dodasz animacje do wielu CALayerów w ramach jednej metody, wszystkie rozpoczną się w (efektywnie) w tym samym czasie. Używam tego podejścia w grze logicznej polegającej na upuszczaniu piłek, na końcu animacji dołączam następny etap animacji do każdej piłki wymagającej dalszej animacji.

Animuję do 60 CALayerów naraz i nie doświadczam żadnych opóźnień między etapami animacji, ale nie buforuję animacji w jakiejkolwiek formie, nie jestem pewien, czy masz napięty napór tam.

Moje animacje są stosunkowo proste i tworzone i dołączane do każdego CALayera w locie. Moje duszki mają 60px kwadrat i używają kilkudziesięciu możliwych obrazów do reprezentowania ich treści.

W niektórych przypadkach istnieje wiele animacji, które można utworzyć z różnymi czasami rozpoczęcia (używając funkcji beginTime), a następnie pakuję je w grupę CAAnimationGroup, ale może nie być możliwe wcześniejsze obliczanie kolejnych animacji.

0

Jeśli dodasz 3 animacje do 3 różnych warstw w tym samym czasie i będą one miały taki sam czas trwania, to oczekuję, że wszystkie będą animowane razem. Jakie zachowanie widzisz?

+0

Edytowałem odpowiedź na to pytanie w pytaniu głównym, ponieważ nie pasowało tutaj. –

2

Jeśli zawiniesz swoje animacje w CATransaction, CG upewni się, że wszystkie działają podczas tej samej iteracji pętli głównej.

[Rozpoczęcie transakcji]; // wszystkie twoje animacje [Transransaction commit];

0

cp21yos: czy możesz rozwinąć swoją metodę? Próbuję zrobić coś podobnego, co obejmuje animowanie kilku warstw jednocześnie, więcej niż raz. Powiedziałeś: "na końcu animacji dołączam kolejny etap animacji". Czy możesz to wyjaśnić?Kiedy próbuję umieścić logikę, aby wykonać dodatkowe animacje w zdarzeniu animationDidStop, pojawia się tylko ostatnia animacja, zamiast całej sekwencji animacji.