Последовательные тайминги без основной анимации - PullRequest
0 голосов
/ 02 марта 2011

Мой текущий незавершенный проект iPad нуждается в последовательности событий; Это выглядит примерно так:

→ Пользователь нажимает кнопку на плавающей панели поверх вида прокрутки
→ плавающая панель оживляется до закрытия
→ модель перезагружает некоторые данные
→ в режиме прокрутки отображаются новые данные
→ прокрутить просмотр прокрутки до нового смещения контента
→ открывается новая плавающая панель

Это не просто анимация. В середине последовательности, которую необходимо приостановить, модели необходимо выполнить некоторую фоновую обработку, а затем доложить о завершении, после чего последовательность можно возобновить. Также анимация плавающих панелей достигается с помощью удобного UIView animateWithDuration: animations: завершение: метод.

Когда я ищу в stackoverflow и в остальной части сети решения для секвенирования, единственное, что появляется, - это Core Animation. Тем не менее, это не относится к CA.

Каков наилучший способ вызова методов последовательности и синхронизации, подобных этому?

Cheers, EP.

1 Ответ

0 голосов
/ 02 марта 2011

CoreAnimation является кандидатом и является тем, что используется внутри методов удобного класса UIView. Как вы говорите, это не полное решение, но оно определенно стоит сохранить для анимации панелей.

В противном случае, я бы предположил, что обзор будет:

  1. Пользователь нажимает кнопку на плавающей панели поверх прокрутки; просмотр контроллера выдает (i) запрос на анимацию на плавающей панели; (ii) что модель начинает загружать данные (я буду считать асинхронно)
  2. В какой-то момент CoreAnimation сообщает, что анимация завершена. В какой-то момент модель сообщает, что новые данные были загружены. Контроллер представления ожидает, пока обе вещи не произошли.
  3. Новые данные помещаются в представление прокрутки
  4. Контроллер представления прокручивает представление, вероятно, используя либо -scrollRectToVisible: animated: или -setContentOffset: animated: (я предполагаю, что для анимации установлено значение 'YES')
  5. контроллер представления также является UIScrollViewDelegate , он ожидает получения -scrollViewWillBeginDecelerating: или -scrollViewDidEndDecelerating: или, возможно, проверяет contentOffset в -scrollViewDidScroll:
  6. в нужный момент он имеет переход CoreAnimation в новой плавающей панели.

Таким образом, вы позволяете представлению прокрутки обрабатывать свою собственную анимацию и доверяете ему сообщать о состоянии анимации, используя CoreAnimation, как ваш код уже делает для панели, и иным образом соединяя все вместе в контроллере представления. Нет необходимости явно использовать CoreAnimation, просто придерживайтесь методов UIView, которые вы уже используете.

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

...