UIView анімація проти CALayers


75

Я борюся з концептуалізацією анімації за допомогою CALayer , на відміну від власних методів анімації UIView . Киньте в це " Core Animation " і, ну, можливо, хтось зможе сформулювати ці концепції з високого рівня, щоб я міг краще уявити, що відбувається і чому я хочу перенести анімацію UIView (з якою я вже цілком знайомий) на CALayer анімація на iPhone. Кожен вигляд у Cocoa-Touch автоматично отримує шар. І, здається, ви можете оживити одне та / або інше?!? Навіть змішувати їх разом?!? Але чому? Де лінія? У чому плюси / мінуси кожного?

Основний посібник з програмування анімації відразу ж переходить до класів шарів і синхронізації, і я думаю, що потрібно зробити крок назад і зрозуміти, чому існують ці різноманітні фрагменти і як вони пов’язані між собою.


3
Це було чудове запитання загального призначення, і всі відповіді чудові. Я проголосував за цю тему.
mobibob

Чудове запитання. Хтось знає найкращу практику анімації CALayer UIView? У моєму прикладі мені потрібен 3D-ефект, і я виявляю, що анімація шару призводить до того, що `` кадр '' UIView збігається з шаром (тому для кнопки крани більше не будуть збігатися).
Марк

Відповіді:


55

Використовуйте види для контролю та шари для цукерок для очей. Шари не отримують подій, тому для цих випадків легше використовувати подання, але коли ви хочете анімувати спрайт, фони тощо, шари мають сенс. Події проходять прямо через шари до попереднього перегляду, тому ви можете мати досить візуальне зображення, не псуючи свої події. Спробуйте накласти подання, яке ви просто використовуєте для візуального представлення, і вам доведеться самостійно передавати події натискання на основний вигляд.


Це чудова відповідь. Дякую!
Warpling

25

Ан UIViewзавжди відображається в CALayer. Коли ви використовуєте UIViewметоди для анімації подання, ви ефективно маніпулюєте основним CALayer.

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


21

За останній рік я зробив купу програм. Ось моє емпіричне правило:

  1. Використовуйте UIView, поки він не зробить те, що ви хочете.
  2. Потім перейдіть до CoreAnimation. Але перед тим, як займатися цим занадто багато ...
  3. Якщо ви пишете більше кількох анімацій, використовуйте Cocos2D.

Що Cocos2D робить краще? Тоді у вас немає інших проблем, пов’язаних з обробкою подій дотику та багатьох інших речей, яких не вистачає у openGL ES?
Подяки

Cocos2D додає багато методів зручності, тому код набагато компактніший. Вони мають чудові вбудовані ефекти. Якщо коротко, якщо ви робите купу анімації, ви напишете менше коду, ніж OpenGL ES або Core Animation, якщо використовуєте Cocos2D. У них є власні методи обробки дотиків, тому це зовсім не проблема.
Кріс Гаррет,

13
Я пропоную не використовувати Cocos2D, якщо ви не пишете гру. Я думаю, що це справді найкращий варіант використання. Однак я погоджуюсь з тим, що ви повинні використовувати анімацію UIView якомога довше, а також для будь-чого іншого, що не використовує CoreAnimation.
Джонатан Стерлінг

9

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


2

Я не впевнений, чи неправильно розумію відповідь Кріса на запитання "Що Cocos2D робить краще? Хіба у вас тоді не виникають інші проблеми, пов’язані з обробкою подій дотику та багатьма іншими речами, яких не вистачає в OpenGL ES?"

Схоже, відповідь припускає, що Cocos2D не базується на середовищі OpenGL ES, а насправді є. Хоча це чудовий двовимірний ігровий движок, він впроваджує OpenGL для більшої частини його рендеринга - приєднаний до фізичної бібліотеки, він надає безліч дуже цікавих можливостей для анімації - і Кріс правильний - це набагато менше кодування.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.