Какие основные API для создания анимаций в 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.

Ответ 18+ 🔞

Да блядь, ну вот опять эти анимации на iOS, голова болит! Слушай, тут главное — не выебываться, а выбрать инструмент по уму, а то можно такую дичь накодить, что потом сам не разберёшься, что за пиздопроебибна получилась.

1. UIView.animate (UIKit) Это как молоток в гараже — простой, тупой и для 90% задач сойдёт. Хочешь что-то поплыло, исчезло или подросло? Вот оно, твоё счастье. Только не пытайся тут интерактивность какую-то прикрутить — сломаешься.

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+) О, а это уже, блядь, хитрая жопа! Хочешь анимацию пальцем потрогать, остановить, назад отмотать? Вот этот зверь для тебя. Сделал слайдер, который должен плавно двигаться от твоего тапа? Бери UIViewPropertyAnimator и не парься. Главное — не перепутай его с обычным animate, а то будешь потом волосы на жопе рвать.

let animator = UIViewPropertyAnimator(duration: 1.0, dampingRatio: 0.6) {
    view.frame.origin.y += 100
}
// Запуск, пауза, отмена, изменение направления
animator.startAnimation()

4. SwiftUI Animations Ну, а это для тех, кто уже в будущем живёт. Написал @State, ткнул .animation() — и всё, блядь, шевелится! Красота, да? Только не пытайся тут старые подходы с UIKit применить — мозг сломаешь. Это другой мир, там свои правила. Всё декларативно, и если что-то не анимируется, значит, ты где-то накосячил с зависимостями, пидарас шерстяной.

@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 — это когда дизайнер принёс тебе анимацию из After Effects, а ты, вместо того чтобы месяц её в коде воспроизводить, просто засунул JSON и сидишь довольный. Магия, ёпта!
  • SpriteKit — это уже для игр. Частицы, взрывы, всякая хуйня. Для обычного интерфейса — оверкилл, конечно.

Итог, блядь: Не умничай! Для обычного моргания кнопок — UIView.animate и не выёбывайся. Пальцем водить надо — UIViewPropertyAnimator в руки. А если уж совсем припёрло и нужно что-то на уровне ядра системы — тогда, и только тогда, лезь в Core Animation. И да пребудет с тобой терпения ебать!