Какой протокол или класс используется для создания кастомных анимаций в UIKit?

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

Ответ

Для создания кастомных анимаций в 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-трансформаций).