В чем разница между UIView и CALayer в iOS?

«В чем разница между UIView и CALayer в iOS?» — вопрос из категории UIKit, который задают на 22% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

UIView — это высокоуровневый, интерактивный компонент фреймворка UIKit для построения пользовательского интерфейса. CALayer — это низкоуровневый объект фреймворка Core Animation, отвечающий за отрисовку и анимацию.

Ключевые отличия

Характеристика UIView CALayer
Наследование Наследуется от UIResponder. Наследуется от NSObject.
Основная роль Управление контентом, обработка событий (касания, жесты), организация иерархии вью. Отрисовка (рендеринг) и аппаратно-ускоренные анимации.
Обработка событий Может быть частью цепочки responder (touchesBegan, gestureRecognizers). Не обрабатывает события. Это просто bitmap в GPU.
Связь Каждый UIView имеет корневой CALayer (view.layer). Не содержит ссылку на UIView.
Производительность Выше накладные расходы из-за обработки событий и авторесайзинга. Более легковесный, оптимизирован для рендеринга.

Пример использования

// UIView для интерактивного элемента
let button = UIButton(type: .system)
button.setTitle("Tap me", for: .normal)
button.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)

// CALayer для графики
let gradientLayer = CAGradientLayer()
gradientLayer.colors = [UIColor.red.cgColor, UIColor.blue.cgColor]
gradientLayer.frame = view.bounds
view.layer.insertSublayer(gradientLayer, at: 0) // Добавляем как подслой

// Настройка внешнего вида через оба API
let customView = UIView()
customView.backgroundColor = .systemGreen // UIView свойство
customView.layer.cornerRadius = 12 // CALayer свойство
customView.layer.shadowOpacity = 0.5 // CALayer свойство

Когда что использовать:

  • UIView — для любых интерактивных элементов интерфейса (кнопки, текстовые поля, кастомные вью с жестами).
  • CALayer — для сложного фона, декоративных эффектов (тени, градиенты, скругления), высокопроизводительных анимаций, когда обработка событий не нужна.