2011-01-20 28 views
13

CAAnimation zapewnia właściwość removedOnCompletion, która domyślnie przyjmuje wartość YES.Co dokładnie robi removeOnCompletion = NO?

Niech rozpoznać te fakty:

A) Core Animation wpływa tylko Prezentacja drzewa, ale nie drzewie modelu. Po zakończeniu animacji zobaczysz wszystko, co jest ustawione w drzewie modelu. Możesz na przykład ustawić fillMode na kCAFillModeBoth, który zamieni wartość z drzewa prezentacji na drzewo modelu po zakończeniu animacji. To powoduje, że animacja nie powraca (co jest najbardziej prawdopodobne).

B) Przeprowadziłem eksperyment. removedOnCompletion = NO będzie NOT ma taki sam efekt jak kCAFillModeBoth lub kCAFillModeForwards. Aby być bardziej precyzyjnym: Nie ma to absolutnie żadnego wpływu na wygląd wyniku po zakończeniu animacji. Czy jest "usunięty", czy nie, wydaje się, że w ogóle nie wpływa na Drzewo Prezentacji.

Aby wyjaśnić, co tak naprawdę zrobił removeOnCompletion, dokumentacja jest zbyt słaba w tym zakresie. Nie rozumiem tego. Czy ktoś może wyjaśnić, co dokładnie zostałoby usunięte i jaka jest korzyść z tego, że go nie usunięto?

Domyślam się, że Apple mówi o samym obiekcie animatora, który jest dodawany do warstwy za pomocą -addAnimation: forKey: ... ale jeszcze raz: jaki jest cel jej utrzymania?

Odpowiedz

12

removedOnCompletion:

Zasadniczo jest animacja usunięty z działaniami warstwie, kiedy że animacja jest wykonywana.

YES - Jeśli zamierzasz użyć animacji tylko raz, nie musisz używać metody delegatów, aby usunąć animację z warstwy po jej zakończeniu.

fillMode:

Ta właściwość kontroluje, co się dzieje, gdy wizualnie animacja jest zakończona, w zależności od rodzaju wypełnienia określonym trybie.

12

Jeśli removedOnCompletion jest TAK, animacja zostanie usunięta po zakończeniu i nie będzie już nic do "wypełnienia do przodu". Więc jeśli chcesz użyć fillMode, musisz ustawić removedOnCompletion na NO.

+0

tak fillmode nie wykazuje żadnego wpływu, ponieważ usuwamy animację, aby obiekt powrócił do pierwotnego stanu –

0

Warstwa prezentacji widoku jest wykonywana przez animację nawet wtedy, gdy jest zatrzymana. Po usunięciu animacji warstwa prezentacji zostanie przywrócona do wartości warstwy modelu widoku, więc otrzymasz wynik jako 0 wskazany.

Powiązane problemy