2009-07-16 3 views
72

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

Руководство по программированию основной анимации сразу же перескакивает в классы & Сроки и я думаю, что нужно сделать шаг назад и понять, почему эти разные части существуют и как соотносятся друг с другом.

+3

Это был отличный, общий вопрос, и все ответы превосходны. Я проголосовал за всех в этой теме. – mobibob

+0

Отличный вопрос. Кто-нибудь знает лучшие практики для анимации CALayer UIView?В моем примере мне нужен 3D-эффект, и я нахожу анимацию слоя, потому что «фрейм» UIView смещается со слоем (так что для кнопки краны больше не будут совпадать). – Marc

ответ

53

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

+1

Это помогло, спасибо :) – Spanky

+0

Это отличный ответ. Спасибо! – Warpling

9

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

24

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

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

20

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

  1. Используйте UIView, пока он не сделает то, что вы хотите.
  2. Затем перейдите к CoreAnimation. Но до того, как вы в нее попадете слишком много ...
  3. Если вы пишете несколько анимаций, используйте Cocos2D.
+0

Что делает Cocos2D лучше? У вас нет других проблем, связанных с обработкой сенсорных событий и многими другими вещами, которые не хватает в openGL ES? – Thanks

+0

Cocos2D добавляет множество удобных методов, поэтому код намного компактнее. У них есть отличные встроенные эффекты. В двух словах, если вы делаете кучу анимации, вы будете писать меньше кода, чем OpenGL ES или Core Animation, если вы используете Cocos2D. У них свои собственные методы обработки касаний, так что это не проблема. –

+13

Мое предложение не использовать Cocos2D, если вы не пишете игру. Я думаю, что это действительно лучший вариант использования. Я согласен, однако, что вы должны использовать анимацию UIView столько, сколько сможете, и для чего-либо, кроме этого, используйте CoreAnimation. –

2

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

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