Что такое слой (CALayer) в контексте UIKit?

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

Ответ

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

Основная роль:

  • Отрисовка: Управляет растровым bitmap-контентом (цвет фона, границы, тени, содержимое изображения).
  • Анимация: Оптимизирован для высокопроизводительных анимаций трансформаций, прозрачности и других визуальных свойств.
  • Иерархия: Слои, как и вью, образуют иерархию (sublayers), что позволяет применять трансформации и эффекты к группам.
// 1. Прямая работа с CALayer
let gradientLayer = CAGradientLayer()
gradientLayer.frame = view.bounds
gradientLayer.colors = [UIColor.red.cgColor, UIColor.blue.cgColor]
view.layer.addSublayer(gradientLayer) // Добавляем слой как подслой корневого слоя вью

// 2. Использование слоя UIView
view.layer.cornerRadius = 10
view.layer.borderWidth = 2
view.layer.borderColor = UIColor.black.cgColor
view.layer.shadowOpacity = 0.5
Отличие от UIView: UIView CALayer
Высокоуровневая абстракция, наследник UIResponder. Низкоуровневая модель отрисовки, наследник NSObject.
Управляет layout (Auto Layout), обрабатывает события (тапы). Не знает об Auto Layout и не обрабатывает события.
Инкапсулирует слой и управляет его жизненным циклом. Лёгковесный, используется для сложной графики и анимаций.

Когда использовать напрямую: Для кастомной отрисовки через delegate или draw(in:), нестандартных анимаций (CAAnimation), сложных визуальных эффектов (маски, фильтры).