UIView анимация против CALayers - PullRequest
75 голосов
/ 16 июля 2009

Я борюсь с концептуализацией анимации с помощью CALayer в отличие от собственных методов анимации UIView. Добавьте сюда « Core Animation », и, возможно, кто-то может сформулировать эти концепции с высокого уровня, чтобы я мог лучше представить, что происходит и почему я хочу перенести анимацию UIView (что я довольно знакомы с теперь) CALayer анимации на iPhone. Каждый вид в Cocoa-Touch автоматически получает слой. И, кажется, вы можете анимировать одну и / или другую?!? Даже смешивать их вместе!!? Но почему? Где линия? Что за / против для каждого?

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

Ответы [ 5 ]

54 голосов
/ 26 июля 2009

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

25 голосов
/ 17 июля 2009

UIView всегда отображается в CALayer. Когда вы используете UIView методы для анимации представления, вы эффективно манипулируете базовым CALayer.

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

21 голосов
/ 17 июля 2009

Я сделал кучу приложений в прошлом году. Вот мое эмпирическое правило:

  1. Используйте UIView, пока он не будет делать то, что вы хотите.
  2. Затем перейдите к CoreAnimation. Но прежде, чем вы зайдете в это слишком много ...
  3. Если вы пишете несколько анимаций, используйте Cocos2D.
9 голосов
/ 16 июля 2009

Преобразования UIView являются только 2D и ограничены этим, однако преобразования LAyer могут быть 3D, и вы должны использовать их, если хотите делать 3D-вещи, анимация UIView будет работать, если вы измените либо преобразование UIView, либо преобразование CALayer. Таким образом, на базовом уровне вы можете выполнять гораздо больше манипуляций, когда работаете со слоем, а не с видом.

2 голосов
/ 16 ноября 2009

Я не уверен, что неправильно понимаю ответ Криса на «Что у Cocos2D лучше? У вас нет других проблем с обработкой сенсорных событий и многими другими вещами, которые отсутствуют в openGL ES?»

Похоже, ответ предполагает, что Cocos2D не основан на платформе OpenGL ES, хотя на самом деле это так. Несмотря на то, что это отличный движок для 2D-игр, он реализует OpenGL для большей части своего рендеринга - при присоединении к библиотеке физики он предоставляет много очень интересных возможностей для анимации - и Крис прав - в действительности это намного меньше кода.

...