Отрывистая анимация (заставка) в заставке? - PullRequest
4 голосов
/ 17 июня 2009

Я создал заставку для Leopard, которая использует core-анимацию. Это не делает ничего слишком сложного; использует дерево CALayers и CATextLayers для создания «таблицы» данных в следующей структуре:

- root
  › maincontainer
    › subcontainer
      › row [multiple]
        › cell [multiple]
          › text layer

Не более 50 CALayers визуализируются на экране одновременно.

После того как я построил «таблицу», я добавляю анимацию «подконтейнера» в представление с помощью CABasicAnimation. Опять же, я не делаю ничего фантастического - просто добавлю.

Проблема в том, что, хотя анимация действительно происходит, ее больно смотреть. На моем компьютере для разработки, который представляет собой iMac 3,06 ГГц с 4 ГБ ОЗУ, он дергается и, похоже, разбивает анимацию на 10 шагов, а не показывает постепенное изменение.

На ppc mac-mini, на который ориентирована заставка, все ухудшается; он даже отказывается воспроизводить анимацию, обычно «анимацию движения» от начала анимации (непрозрачность 0%) до половины (50%) и затем до завершения.

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

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

Информация в Google довольно скудная в том, что касается использования CA в заставках или использования CA в целом, и советы / учебные пособия по профилирующим / вызывающим беспокойство заставкам, похоже, не существуют. Поэтому любая помощь, которую может оказать сообщество, будет приветствоваться!

--- ОБНОВЛЕНИЕ ---

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

1 Ответ

1 голос
/ 19 июня 2009

В хранителе экрана нет ничего особенного. Я предполагаю, что вы начали с Core Animation Programming Guide ? Пройдя его через Инструменты, вы получите много информации о том, где вы уделяете слишком много времени.

Будет полезен код, который вы используете для постепенного появления. Для того, что вы описываете, вам даже не нужна CABasicAnimation; Вы можете просто установить свойства анимации слоев, и они по умолчанию анимируются. Убедитесь, что вы прочитали Неявные анимации . Остальная часть этой страницы, вероятно, также полезна.

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

...