Я создал скринсейвер для Leopard, который использует core-animation. Он не делает ничего чрезмерно сложного; использует дерево CALayers и CATextLayers, чтобы произвести «стол» данных в следующей структуре:Jerky/juttery (core-) анимация в заставке?
- root
› maincontainer
› subcontainer
› row [multiple]
› cell [multiple]
› text layer
В лучшем случае есть 50 CALayers оказываемых на экране в любой момент времени.
Как только я построил «таблицу», я добавляю анимацию «подконтейнера» в поле зрения с помощью CABasicAnimation. Опять же, я не делаю ничего необычного - просто проглаживание.
Проблема в том, что в то время как анимация действительно имеет болезненный, чтобы посмотреть. Это отрывисто на моей машине разработки, которая представляет собой iMac 3,06 ГГц с 4 ГБ оперативной памяти и, кажется, отбивает анимацию на 10 шагов, а не показывает постепенное изменение.
Ухудшается на mac-mini ppc, для которого предназначена заставка; он отказывается даже воспроизводить анимацию, обычно «tweening» с начала анимации (непрозрачность 0%) на полпути (50%), а затем завершается.
Я относительно новичок в ObjectiveC, и мой опыт основан на использовании собранных мусором окружений, но я не могу поверить, что у меня достаточно памяти в той точке, в которой заставка начинает вызывать такие проблемы.
Кроме того, я уверен, что это не проблема с оборудованием. Я протестировал встроенные скринсейверы, которые используют core-animation, и загрузил несколько бесплатных CA для сравнения, и они работают без проблем на обеих машинах.
Информация довольно тонкая в Google относительно использования CA в заставках или, вообще, CA, и советы/руководства по профилированию/тревожным заставкам кажутся несуществующими. Поэтому любая помощь, которую может предоставить сообщество, будет приветствоваться!
--- UPDATE ---
Кажется, как будто неявные анимации помочь сгладить вещи немного. Все еще отвратительно, но не так плохо, как пытаться оживить все с явной анимацией, как в моем решении.