Ответ
Анимации в UIKit работают путем плавного изменения анимируемых свойств UIView или ее слоя CALayer с течением времени. Основные API:
1. UIView.animate (Классический API) Простой метод для анимации нескольких свойств одновременно.
UIView.animate(withDuration: 0.3,
delay: 0.0,
options: [.curveEaseInOut]) {
// Изменяемые свойства
view.alpha = 0.0
view.frame.origin.y += 50
view.transform = CGAffineTransform(scaleX: 1.2, y: 1.2)
} completion: { finished in
// Действие по завершении
view.removeFromSuperview()
}
2. UIViewPropertyAnimator (iOS 10+, Гибкий и контролируемый) Позволяет интерактивно управлять анимацией (пауза, отмена, изменение скорости).
let animator = UIViewPropertyAnimator(duration: 0.5,
dampingRatio: 0.7) {
view.frame.origin.x = 200
}
// Добавление этапов анимации
animator.addAnimations { view.alpha = 0.5 }
// Запуск
animator.startAnimation()
// Возможность паузы и отмены: animator.pauseAnimation(), animator.stopAnimation(true)
3. Core Animation (CALayer, для сложных и производительных анимаций) Прямая работа с графическим слоем. Позволяет анимировать свойства, недоступные для UIView.
let animation = CABasicAnimation(keyPath: "transform.rotation.z")
animation.fromValue = 0
animation.toValue = CGFloat.pi * 2
animation.duration = 1.0
animation.repeatCount = .infinity
view.layer.add(animation, forKey: "spinAnimation")
Ключевые принципы:
- Анимируемые свойства:
frame,bounds,center,alpha,transform,backgroundColor. - Производительность: Анимации выполняются в отдельном потоке рендеринга и используют аппаратное ускорение.
- Избегайте анимации
frameвместе с Auto Layout. Вместо этого анимируйте константы constraints или используйтеtransform. - Для сложных последовательностей и переходов между контроллерами используйте UIViewControllerTransitioningDelegate.