2009-06-17 1 views
4

Я создал скринсейвер для 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 ---

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

ответ

1

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

Код, который вы используете, чтобы сделать fade-in, был бы полезен. Для того, что вы описываете, вам даже не нужна CABasicAnimation; вы можете просто установить анимационные свойства слоев, и они по умолчанию ожидают. Убедитесь, что вы прочитали Implicit Animations. Остальная часть этой страницы, вероятно, также используется.

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

 Смежные вопросы

  • Нет связанных вопросов^_^