Анимация UIView против CALayers
-
16-09-2019 - |
Вопрос
Я изо всех сил пытаюсь концептуализировать анимацию с помощью CALayer в отличие от UIView's собственные методы анимации.Бросать "Основная анимация» в это, и, возможно, кто-то сможет сформулировать эти концепции на высоком уровне, чтобы я мог лучше визуализировать, что происходит и почему я хочу перенести анимацию UIView (с которой я теперь хорошо знаком) в анимацию CALayer на iPhone. .Каждое представление в Cocoa-Touch автоматически получает слой.И, кажется, можно анимировать одну и/или другой?!? Даже смешать их вместе?!?Но почему?Где линия?Какие плюсы и минусы у каждого из них?
Руководство по программированию базовой анимации сразу же переходит к классам слоев и времени, и я думаю, что нужно сделать шаг назад и понять, почему эти различные части существуют и как связаны друг с другом.
Решение
Используйте виды для контроля и слои для удовольствия.Слои не получают событий, поэтому в таких случаях проще использовать представление, но когда вы хотите анимировать спрайт, фон и т. д., слои имеют смысл.События передаются прямо через слои в фоновый вид, поэтому вы можете иметь красивое визуальное представление, не испортив события.Попробуйте наложить представление, которое вы используете только для визуального представления, и вам придется самостоятельно передавать события касания базовому представлению.
Другие советы
Ан UIView
всегда отображается в CALayer
.Когда вы используете UIView
методы для анимации представления, вы эффективно манипулируете базовым CALayer
.
Если вам нужно сделать простые вещи, используйте UIView
методы.Для более сложных ситуаций или если вы хотите, чтобы слои не были связаны с каким-либо конкретным представлением, используйте CALayers
.
За последний год я сделал кучу приложений.Вот мое практическое правило:
- Используйте UIView до тех пор, пока он не перестанет делать то, что вы хотите.
- Затем перейдите в CoreAnimation.Но прежде чем вы углубитесь в это слишком сильно...
- Если вы пишете несколько анимаций, используйте Cocos2D.
Преобразования UIView являются только 2D и ограничены этим, однако преобразования LAyer могут быть 3D, и вам следует использовать их, если вы хотите делать 3D-материалы. Анимация UIView будет работать, если вы измените преобразование UIView или преобразование CALayer.Таким образом, на базовом уровне вы можете выполнять гораздо больше манипуляций, когда работаете со слоем, а не с представлением.
Я не уверен, что неправильно понимаю ответ Криса на вопрос: «Что Cocos2D делает лучше?Нет ли у вас других проблем, связанных с обработкой событий касания и многими другими вещами, которые отсутствуют в openGL ES?"
Похоже, что ответ предполагает, что Cocos2D не основан на платформе OpenGL ES, хотя на самом деле это так.Несмотря на то, что это отличный движок для 2D-игр, он реализует OpenGL для большей части рендеринга - подключенный к физической библиотеке, он предоставляет множество очень интересных возможностей для анимации - и Крис прав - на самом деле требуется гораздо меньше кода.