Ответ
Для создания кастомных анимаций в UIKit используется несколько ключевых протоколов и классов, в зависимости от сложности:
1. UIViewPropertyAnimator (iOS 10+)
Современный и предпочтительный способ для интерактивных, прерываемых и обратимых анимаций. Реализует протокол UIViewImplicitlyAnimating.
// Создание анимации
let animator = UIViewPropertyAnimator(
duration: 0.5,
controlPoint1: CGPoint(x: 0.2, y: 0.8),
controlPoint2: CGPoint(x: 0.8, y: 0.2)
) {
// Изменения анимируемых свойств
view.frame.origin.y += 100
view.alpha = 0.5
}
// Контроль анимации
animator.startAnimation()
animator.pauseAnimation()
animator.continueAnimation(withTimingParameters: nil, durationFactor: 0)
2. Протокол UIViewControllerAnimatedTransitioning
Для создания кастомных переходов между контроллерами (UINavigationController, UITabBarController).
3. Core Animation (CAAnimation, CALayer) Для сложных, производительных анимаций на уровне графического процессора.
let animation = CABasicAnimation(keyPath: "transform.rotation.z")
animation.toValue = CGFloat.pi * 2
animation.duration = 1.0
view.layer.add(animation, forKey: "rotation")
Выбор инструмента:
- UIView.animate — для простых анимаций.
- UIViewPropertyAnimator — для интерактивных и контролируемых.
- Core Animation — для максимальной производительности и сложных эффектов (масок, градиентов, 3D-трансформаций).