Какие основные API для создания анимаций в iOS?

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

Ответ

Выбор 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.