Анимация слоя удаляется при переключении приложений - PullRequest
2 голосов
/ 15 февраля 2012

(iOS 5.0)

У меня есть CAKeyframeAnimation, добавленная к слою вида с бесконечным количеством повторений (курсор мигает).Однако при переключении приложений и возврате анимация удаляется со слоя (или, возможно, весь слой заменяется, я не уверен).

Я попытался повторно добавить их в viewDidLoad и viewWillAppear, нони один не вызывается при переключении приложений.Я обнаружил, что в UIApplicationDelegate есть applicationWillEnterForeground: метод.Я планирую использовать это, но у меня есть два вопроса:

  • Существуют ли другие обстоятельства, которые запускают анимацию или слой для выгрузки?Есть ли более подходящее событие для прослушивания?
  • Каков наилучший способ (в смысле шаблона проектирования) реагировать на эти события (например, с помощью целевого действия)?

Ответы [ 2 ]

3 голосов
/ 26 августа 2015

При переключении приложений или контроллеров представления система разрешает анимации на слое останавливаться (завершено), поэтому вы можете установить removedOnCompletion на NO (по умолчанию YES), и оно будет работать.

2 голосов
/ 27 февраля 2012

Вы правы, что вам придется снова добавлять анимацию к CALayer, когда приложение снова выходит на передний план.

Вам необходимо удалить их при получении обратного вызова applicationWillResignActive. При желании вы можете проверить presentationLayer, чтобы получить отображаемые в данный момент параметры - или почти как - экранные свойства.

Затем, когда ваше приложение снова станет активным согласно обратному вызову applicationDidBecomeActive, добавьте анимацию заново.

Ваше приложение может перейти из активного в неактивное состояние по ряду причин, например, прием звонка, смс, будильник, пользователь нажимает кнопку домой и т. д.

Посмотрите на мой ответ на этот вопрос, где я расскажу о некоторых проблемах с возобновлением CAAnimation:

Восстановление анимации там, где она остановилась, когда приложение возобновляет работу из фона

...