Связана ли UIView с CALayer в UIKit?

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

Ответ

Да, каждая UIView неразрывно связана с CALayer. UIView является контроллером, управляющим своим основным слоем (backing layer), который отвечает за визуальный контент и анимации. Это основа архитектуры Core Animation.

Базовое взаимодействие:

let view = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
// Настройка визуальных свойств через слой:
view.layer.cornerRadius = 8
view.layer.borderWidth = 2
view.layer.shadowOpacity = 0.7

Ключевые принципы связи UIView и CALayer:

  1. Свойство layer: У каждой UIView есть свойство layer (типа CALayer), доступное для модификации.
  2. Делегирование отрисовки: UIView рисует своё содержимое (в draw(_:)) на своём слое.
  3. Иерархия: Иерархия слоев (layer.sublayers) зеркалирует иерархию вью (view.subviews). Вы можете добавлять дополнительные слои через view.layer.addSublayer().
  4. Управление жизненным циклом: UIView создаёт, конфигурирует и сохраняет сильную ссылку на свой основной слой.
  5. Неявные анимации: Изменения анимируемых свойств слоя (например, position, opacity) автоматически анимируются, если изменение происходит вне транзакции с отключёнными анимациями (CATransaction.setDisableActions(true)).