Ответ
Выбор API для анимации зависит от требуемой сложности, интерактивности и версии iOS.
1. UIView.animate (UIKit)
Простой и наиболее распространенный API для базовых анимаций свойств UIView (альфа, фрейм, трансформация).
UIView.animate(withDuration: 0.5,
delay: 0.0,
options: [.curveEaseInOut]) {
view.alpha = 0.0
view.transform = CGAffineTransform(scaleX: 1.5, y: 1.5)
} completion: { _ in
view.removeFromSuperview()
}
2. Core Animation (CALayer) Низкоуровневый фреймворк для высокопроизводительных и сложных анимаций. Работает напрямую со слоями.
let positionAnimation = CABasicAnimation(keyPath: "position.x")
positionAnimation.fromValue = view.layer.position.x
positionAnimation.toValue = view.layer.position.x + 200
positionAnimation.duration = 1.0
positionAnimation.timingFunction = CAMediaTimingFunction(name: .easeInEaseOut)
view.layer.add(positionAnimation, forKey: "slide")
// Важно: анимация слоя не изменяет реальное положение UIView
3. UIViewPropertyAnimator (iOS 10+) Мощный API для создания интерактивных, прерываемых и обратимых анимаций. Позволяет контролировать анимацию во время ее выполнения.
let animator = UIViewPropertyAnimator(duration: 1.0, dampingRatio: 0.6) {
view.frame.origin.y += 100
}
// Запуск, пауза, отмена, изменение направления
animator.startAnimation()
4. SwiftUI Animations
Декларативный подход с модификаторами .animation(), .withAnimation() и протоколом Animatable.
@State private var isScaled = false
Circle()
.scaleEffect(isScaled ? 1.5 : 1.0)
.animation(.spring(response: 0.5, dampingFraction: 0.6), value: isScaled)
.onTapGesture { isScaled.toggle() }
5. Другие технологии:
- Lottie — для воспроизведения сложных векторных анимаций из JSON.
- SpriteKit — для игровых анимаций и частиц.
Итог: Для большинства UI-анимаций достаточно UIView.animate. Для интерактивных элементов (прогресс, перетаскивание) используйте UIViewPropertyAnimator. Для максимальной производительности и кастомных эффектов — Core Animation.