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

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

Ответ

Опыт включает создание анимаций с помощью UIView.animate, UIViewPropertyAnimator, CAAnimation и их комбинаций для интерактивных переходов.

Подходы и инструменты:

  • UIViewPropertyAnimator: Для интерактивных, прерываемых и обратимых анимаций с паузами.
  • CAAnimation (Core Animation): Для высокопроизводительных анимаций трансформации, по пути (CAShapeLayer) или ключевых кадров (CAKeyframeAnimation).
  • UIView.transition: Для анимаций перехода между view (например, flip, cross dissolve).

Пример интерактивной анимации масштабирования:

// Создание аниматора
let scaleAnimator = UIViewPropertyAnimator(
    duration: 0.5,
    dampingRatio: 0.7
) {
    self.targetView.transform = CGAffineTransform(scaleX: 1.2, y: 1.2)
}

// Добавление завершающего блока для цепочки анимаций
scaleAnimator.addCompletion { position in
    if position == .end {
        UIView.animate(withDuration: 0.3) {
            self.targetView.transform = .identity
        }
    }
}

// Запуск
scaleAnimator.startAnimation()

Оптимизация производительности:

  • Использование shadowPath для анимации слоя с тенью.
  • Работа с shouldRasterize и rasterizationScale для сложных, но статичных слоев.
  • Предпочитание трансформаций (transform, alpha) анимации изменения фреймов.