it-roy-ru.com

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

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

95
Oleg Danu

На 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 расширились по мере развития iOS SDK, но есть еще несколько вещей, которые лучше всего сделать, взаимодействуя с базовым CALayer.

211
Brad Larson

Из блога Рэя Вендерлиха ( Учебник )

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

39
Mat

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

26
Forrest

UIView является контейнером для CALayers. Использование UIKit.

CALayer где мы рисуем содержимое. Использование CoreGraphics

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

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

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

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

7
Gobi M

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

0
musixlemon