В iOS, что используется для анимации: UIView или CALayer?

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

Ответ

Для анимаций в iOS можно использовать как UIView, так и CALayer. Выбор зависит от требуемой сложности и контроля.

UIView-анимации

Назначение: Простые, высокоуровневые анимации стандартных свойств (frame, alpha, transform). Преимущества: Лаконичный API, автоматическое управление временем и кривыми, безопасность (отсутствие конфликтов с Auto Layout при использовании transform).

// Анимация прозрачности и перемещения
UIView.animate(withDuration: 0.5,
               delay: 0,
               options: [.curveEaseInOut]) {
    myView.alpha = 0.0
    myView.transform = CGAffineTransform(translationX: 100, y: 0)
}

CALayer / Core Animation анимации

Назначение: Сложные, низкоуровневые анимации, включая кастомные свойства, анимации по пути (CAKeyframeAnimation), 3D-трансформации. Преимущества: Высокая производительность, точный контроль над каждым кадром, анимация не-UI свойств.

// Базовая анимация прозрачности через Core Animation
let fadeAnimation = CABasicAnimation(keyPath: "opacity")
fadeAnimation.fromValue = 1.0
fadeAnimation.toValue = 0.0
fadeAnimation.duration = 0.5
myView.layer.add(fadeAnimation, forKey: "fade")
// Важно: Модель слоя не меняется. Чтобы зафиксировать результат:
myView.layer.opacity = 0.0

Сравнение и рекомендации

Критерий UIView CALayer (Core Animation)
Сложность API Низкая (блоки) Высокая (явное создание анимаций)
Контроль Ограниченный Полный (делегаты, ключевые кадры)
Производительность Высокая для стандартных задач Максимальная, ближе к металлу
Использование Анимации UI, взаимодействие с Auto Layout Сложные визуальные эффекты, анимация градиентов, теней

Практическое правило: Начинайте с UIView.animate. Переходите к CALayer, если нужна анимация специфического свойства слоя (например, cornerRadius, borderWidth), сложная последовательность или максимальная производительность.