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