Есть ли способ приостановить базовую анимацию и возобновить ее через некоторое время? - PullRequest
8 голосов
/ 30 мая 2009

У меня есть несколько Core Animation одновременно. Все они имеют контекст и идентификатор анимации, где контекст - это объект, который анимируется (объекты UIImageView). Я хотел бы приостановить их, чтобы анимация просто временно прекращалась, а затем, когда что-то было сделано, возобновите ее, чтобы завершить. Это происходит только при очень быстрых движениях прокрутки в UIScrollView. Я хочу улучшить производительность, остановив все текущие анимации, но не ту, которая заставляет прокручиваться представление прокрутки. Я реализовал пользовательскую анимацию contentOffset для этого вида прокрутки.

Ответы [ 4 ]

18 голосов
/ 15 августа 2010

Вы можете приостановить анимацию слоев, установив скорость анимации на ноль, см. Как приостановить анимацию дерева слоев .

5 голосов
/ 28 марта 2012

Для всех, кто приходит на поиски, вы можете приостановить и возобновить анимацию:

https://developer.apple.com/library/archive/qa/qa1673/_index.html

4 голосов
/ 30 мая 2009

Единственный способ обойти это - следующее.

Для каждого вида, который вы хотите прекратить анимацию:

Установить кадр представления на слой представления

Удалить все анимации из этого представления

Выполните прокрутку

Пересчитать анимацию

Добавление новых анимаций в представление

Я знаю, что это не то, что вы хотите услышать, но это не так плохо, как кажется. Хороший способ отследить представления, которые вы хотите остановить, - дать им предопределенный тег.


Чтобы удалить анимацию:

[myView.layer removeAllAnimations]

[myView.layer removeAnimationForKey: @ "theAnimationKey"]

0 голосов
/ 06 октября 2018

Руководство по программированию Core Animation содержит раздел Настройка синхронизации анимации , который включает в себя раздел Приостановка и возобновление анимации .

...