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

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

5 Solutions collect form web for “Каковы различия между UIView и CALayer?”

В 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.

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

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

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

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

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

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

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

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

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

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

  • Запретить VoiceOver показывать виды, которые находятся под большим прозрачным представлением
  • Интерфейс Builder не разрешает подключения к пользовательскому классу UIView?
  • Как отключить сообщение «highlight subviews» для UIView / UIViewController в SDK для iOS?
  • Subview Gesture Recognizer не называется
  • как игнорировать события касания в самом высоком uiview, когда это ясно, и другой uiview может справиться с ними
  • Почему я не могу изменить размер фрейма представления в Swift?
  • Сокращение UIScrollView для фокусировки на определенной странице
  • Как получить layoutSubviews для вызова перед sizeThatFits?
  • Создание многоразового UIView с xib (и загрузка из раскадровки)
  • Использование автозапуска в таблицеHeaderView
  • CAayer - (void) drawInContext: (CGContextRef) ctx никогда не вызывается
  • Interesting Posts

    Изменение интервала CADisplayLink

    Кнопки навигации, потерянные в приложении раскадровки

    iOS 11 UIStackView заполняет пропорциональное распределение вызывает странную анимацию загрузки просмотров

    ios – NSString URL-декодирование?

    программно выделить UIBarButtonItem

    Веб-приложение HTML5 не кэшируется при добавлении на главный экран в iOS

    UIActivityViewController => LaunchServices: invalidationHandler называется

    Как изменить альфа-канал существующего цвета фона

    Как выбрать и выделить UICollectionView, например, UITableViewCell?

    kCTSuperscriptAttributeName не работает для использования индекса и надстроки

    Тип 'String' не соответствует ошибке протокола NSCopying при подавлении AnyObject в String

    Ошибка iOS: нет видимого @interface для 'Project' объявляет селектор 'alloc'

    Ячейки UICollectionView отображаются только после второго вызова reloadData

    Обводка пути CGContext с использованием изображения в CoreGraphics

    Ошибка какао 262, Не удается загрузить файл в iCloud

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.