Каковы различия между UIView и CALayer? - PullRequest
97 голосов
/ 19 октября 2011

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

Ответы [ 5 ]

216 голосов
/ 20 октября 2011

В iOS каждый UIView поддерживается с помощью Core Animation CALayer, поэтому вы имеете дело с 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.

40 голосов
/ 19 октября 2011

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

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

30 голосов
/ 12 декабря 2013

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

7 голосов
/ 15 сентября 2015

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

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

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

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

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

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

0 голосов
/ 26 мая 2015

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

...