Ответ
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— для сложного фона, декоративных эффектов (тени, градиенты, скругления), высокопроизводительных анимаций, когда обработка событий не нужна.