Каковы различия между UIView и CALayer?

Оба имеют большинство одинаковых атрибутов, оба поддерживают разные виды анимаций, оба представляют разные данные. Каковы различия между UIView и CALayer?

Ответ 1

В iOS каждый UIView поддерживается CALayer Core Animation, поэтому вы используете CALayers при использовании UIView, даже если вы этого не понимаете. В отличие от NSViews на Mac, который развился до Core Animation, UIViews были легкими обертки вокруг этих CALayers.

Как я описываю в аналогичном вопросе "Когда использовать CALayer на Mac/iPhone?" , работа с CALayers не дает вам существенных преимуществ по производительности UIViews. Одной из причин, по которой вам может понадобиться создать элемент пользовательского интерфейса с CALayers вместо UIViews, является то, что его можно легко портировать на Mac. UIViews сильно отличаются от NSViews, но CALayers практически идентичны на двух платформах. Вот почему структура Core Plot излагает свои графики с использованием CALayers вместо других элементов пользовательского интерфейса.

Одна вещь, предоставляемая UIViews над CALayers, - это встроенная поддержка взаимодействия с пользователем. Они обрабатывают тесты на попадание и другие связанные действия, которые вам нужно будет создать самостоятельно, если вы будете управлять иерархией CALayers. Не так сложно реализовать это самостоятельно, но это дополнительный код, который вам нужно написать при создании интерфейса CALayer.

Вам часто потребуется доступ к базовым слоям для UIView при выполнении более сложных анимаций, чем позволяет базовый класс UIView. Возможности анимации UIView выросли по мере созревания SDK iOS, но есть еще несколько вещей, которые лучше всего сделать, взаимодействуя с базовым CALayer.

Ответ 2

Из блога Ray Wenderlich (Tutorial)

CALayers - это просто классы, представляющие прямоугольник на экране с визуальным контентом. "Но подождите минутку, - скажете вы, - вот что для чего нужны UIView!" Это правда, но это трюк: каждый UIView содержит корневой слой, на который он обращается!

Ответ 3

Проще говоря, UIView наследует от NSResponder, обрабатывает события от пользователей, содержит CALayer, которые наследуют от NSObject, в основном фокусируются на рендеринге, анимации и т.д.

Ответ 4

UIView - контейнер для CALayers. Используя UIKit.

CALayer, где мы рисуем содержимое. Используя CoreGraphics

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

Чтобы создать общий скелет для Mac и iOS, следуйте дизайну вашего приложения, используя CALayers. Поскольку он доступен на обеих платформах.

UIView, имеющий функции, такие как события касания, полученные с помощью делегатов -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event, tochesStart как события и другие функции UIKit.

Чтобы работать с CALayers, используйте знания Core Graphics. Для любого простого представления рендеринга UIView достаточно.

Ответ 5

Большая разница в UIView предназначена для CocoaTouch на мобильном устройстве. Он добавляет некоторый обработчик событий, который CALayer не предоставил.