Когда использовать CALayer на Mac / iPhone? - PullRequest
22 голосов
/ 19 сентября 2009

Я немного запутался, когда использовать CALayer на iPhone или Mac, а когда не использовать? CoreAnimation прекрасно работает с моими объектами на основе UIView без использования CALayer. Когда подходящее время копаться в этом классе?

Ответы [ 2 ]

36 голосов
/ 19 сентября 2009

В моих тестах UIView и CALayer обеспечивают примерно одинаковый уровень производительности на iPhone. Как упоминает rpetrich в своем комментарии, UIViews - это тонкая оболочка для CALayers. На Mac CALayers намного легче, чем NSViews.

Как указывает Бен, вы можете выйти за пределы возможностей неявной анимации, работая напрямую с CALayers, даже предоставляя некоторые трехмерные эффекты через CATransform3D. Во многих случаях вы можете сделать это даже со стандартными представлениями, получив доступ к базовому слою (если представление поддерживается на уровне слоя).

Еще одна проблема - кроссплатформенный (Mac / iPhone) код. Приложение для моего iPhone использует интерфейс all-CALayer для своего основного представления в значительной степени потому, что я могу использовать точно такой же код для рисования этого интерфейса в его аналоге Mac. В качестве другого примера я приведу вас к Core Plot framework , который полностью рисует графики с использованием CALayers и работает как на Mac, так и на iPhone. Уровни CALay примерно одинаковы на обеих платформах, где UIView и NSView имеют очень разные интерфейсы.

4 голосов
/ 19 сентября 2009

Если вы можете делать то, что хотите, с помощью «неявной анимации» (предлагаемой UIKit / AppKit без необходимости копаться в CA, слоях и аниматорах), тогда определенно идите по этому пути.

CoreAnimation входит в игру, когда вы начинаете использовать более сложные анимации, такие как нелинейное движение или повторяющиеся эффекты, а также определенные синхронизированные эффекты. Есть много, что вы можете сделать с ним, но это довольно тяжелый инструмент (с соответствующей кривой обучения, по крайней мере, по сравнению с UIKit).

...