Мікроанімації інтерфейсу мобільного застосунку: iOS та Android

TRUETECH займається розробкою, підтримкою та обслуговуванням мобільних додатків iOS, Android, PWA. Маємо великий досвід та експертизу для публікації мобільних додатків до популярних маркетів Google Play, App Store, Amazon, AppGallery та інші.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Мікроанімації інтерфейсу мобільного застосунку: iOS та Android
Середній
~2-3 дні
Часті запитання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    858
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    743
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1160
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1034
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    968
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    562

Ми знаємо: кнопка без візуальної реакції на натискання відчувається зламаною — користувач натискає знову, застосунок обробляє подвійний тап. Мікроанімації елементів інтерфейсу мобільного застосунку вирішують цю проблему: роблять інтерфейс чуйним та інтуїтивним. Маємо понад 5 років досвіду та 20+ впроваджень мікроанімацій. За нашими даними, якісна мікроанімація підвищує залученість у 1.3–1.4 рази порівняно зі статичним інтерфейсом та знижує кількість помилкових натискань на 20%, що економить до $5000 на етапі тестування. Наші сертифіковані інженери гарантують якісну реалізацію. Середня вартість робіт з розробки бібліотеки мікроанімацій — $800–1500. Оптимальні мікроанімації інтерфейсу мобільного застосунку зменшують когнітивне навантаження.

Чому мікроанімація так важлива для користувача?

Користувач не замислюється про анімацію, поки вона працює правильно. Як тільки кнопка «залипає» або перемикач спрацьовує без візуального підтвердження, довіра до застосунку падає. Мікроанімації вирішують конкретні завдання: підтвердження дії, привернення уваги до зміни статусу, плавний перехід між станами. Як рекомендує Apple Human Interface Guidelines, використовуйте spring-анімації для інтерактивних елементів, щоб передати фізичність та передбачуваність. Spring-анімації в UIKit швидше в 1.5 рази, ніж стандартні анімації з Cubic Bezier.

Як вибрати правильну анімацію для елемента інтерфейсу?

Вибір залежить від типу елемента та контексту. Для кнопок основна анімація — scale на натискання (0.92–0.96) з return spring. Для іконок — символічні ефекти (bounce, pulse, variable color) або Lottie. Lottie в 2 рази простіше за програмну анімацію для складних іконок. Для переходів між екранами — slide, fade, scale з кастомними кривими. Нижче таблиця порівняння підходів та таблиця типових рішень:

Платформа Інструмент Продуктивність Крива навчання Легкість кастомізації
iOS (UIKit) UIView.animate Відмінна (GPU) Середня Висока
iOS (SwiftUI) withAnimation + symbolEffect Відмінна (Metal) Низька Середня
Android (Compose) animateFloatAsState Відмінна (GPU) Середня Висока
Крос-платформа Lottie Хороша (зі стисненням .lottie) Низька Обмежена
Елемент Рекомендована анімація Тривалість (ms) Параметри spring
Кнопка scale (0.94) + spring 120–300 damping 0.6, velocity 8
Іконка symbolEffect (bounce) 200
Бейдж scaleIn + fadeIn 150 damping 0.5
Перемикач slide + color transition 200 stiffness 300

Як реалізувати мікроанімації на iOS: UIKit та SwiftUI?

UIKit: scale + haptics = правильний тап

Мінімальна реалізація feedback на UIButton:

class SpringButton: UIButton {
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        super.touchesBegan(touches, with: event)
        UIImpactFeedbackGenerator(style: .light).impactOccurred()
        UIView.animate(
            withDuration: 0.12,
            delay: 0,
            usingSpringWithDamping: 0.6,
            initialSpringVelocity: 8,
            options: [.allowUserInteraction]
        ) {
            self.transform = CGAffineTransform(scaleX: 0.94, y: 0.94)
        }
    }

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        super.touchesEnded(touches, with: event)
        UIView.animate(
            withDuration: 0.3,
            delay: 0,
            usingSpringWithDamping: 0.45,
            initialSpringVelocity: 6,
            options: [.allowUserInteraction]
        ) {
            self.transform = .identity
        }
    }
}

Прапорець .allowUserInteraction обов'язковий. Без нього кнопка не реагує на тапи поки анімується, що створює відчуття «залипання».

SwiftUI: символьні анімації та keyframe

SF Symbols 5 (iOS 17+) дають symbolEffect(_:) — готові анімації для системних іконок:

Image(systemName: "heart.fill")
    .symbolEffect(.bounce, value: isLiked)
    .symbolEffect(.variableColor.iterative.reversing, isActive: isLoading)

.bounce — один раз відпружинив при зміні isLiked. Не потрібно писати анімацію вручну.

Для складних багатокрокових мікроанімацій — KeyframeAnimator:

KeyframeAnimator(initialValue: CheckmarkState()) { value in
    Circle()
        .scaleEffect(value.scale)
        .opacity(value.opacity)
} keyframes: { _ in
    KeyframeTrack(\.scale) {
        LinearKeyframe(0.0, duration: 0.05)
        SpringKeyframe(1.2, duration: 0.2, spring: .bouncy)
        SpringKeyframe(1.0, duration: 0.15)
    }
    KeyframeTrack(\.opacity) {
        LinearKeyframe(0.0, duration: 0.05)
        LinearKeyframe(1.0, duration: 0.1)
    }
}

Це паттерн для анімації галочки після успішної дії — scale+opacity одночасно, з різними кривими.

Як реалізувати мікроанімації на Android: Jetpack Compose?

У Compose мікроанімації будуються на animateFloatAsState, animateColorAsState та updateTransition:

val scale by animateFloatAsState(
    targetValue = if (isPressed) 0.93f else 1f,
    animationSpec = spring(
        dampingRatio = Spring.DampingRatioMediumBouncy,
        stiffness = Spring.StiffnessHigh
    ),
    label = "button_scale"
)

Box(modifier = Modifier
    .scale(scale)
    .clickable(
        interactionSource = interactionSource,
        indication = null  // прибираємо ripple, замінюємо на spring
    ) { onClick() }
)

indication = null прибирає стандартний ripple. Це спірне рішення: Material Design 3 передбачає ripple як стандарт. Прибирати його варто лише там, де є своя повноцінна заміна.

AnimatedVisibility з кастомними enter/exit — для появи елементів:

AnimatedVisibility(
    visible = showBadge,
    enter = scaleIn(
        animationSpec = spring(Spring.DampingRatioLowBouncy),
        transformOrigin = TransformOrigin(1f, 0f)
    ) + fadeIn(),
    exit = scaleOut(transformOrigin = TransformOrigin(1f, 0f)) + fadeOut()
) {
    Badge { Text(count.toString()) }
}

TransformOrigin(1f, 0f) — анімація від правого верхнього кута, як у бейджів сповіщень.

Lottie для іконок зі станами

Зазначимо: коли дизайнер хоче складну іконку — лайк, обране, перемикач з кастомним треком — Lottie простіше, ніж малювати це програмно. Аніматор експортує JSON через Bodymovin з After Effects, інтегруємо через lottie-ios або lottie-android. Проблема Lottie: файли можуть бути важкими. 200 KB JSON для іконки обраного — забагато. Оптимізуємо через lottie-web's dotLottie формат (.lottie — ZIP-архів) або обрізаємо зайві шари в редакторі. Детальніше про формат можна дізнатися з статті про Lottie у Вікіпедії.

Часті помилки

  • Анімувати backgroundColor напряму через UIView — це Core Animation CATransaction без GPU-прискорення для кольору. Правильно: змінювати через UIView.animate або використовувати CABasicAnimation на backgroundColor шару.
  • Забувати про reduceMotion. На iOS перевіряємо UIAccessibility.isReduceMotionEnabled, на Android Settings.Global.TRANSITION_ANIMATION_SCALE. Користувачі з вестибулярними розладами вимикають анімації. Поважаємо це: якщо reduceMotion активний, замінюємо складні анімації на простий fade або вимикаємо їх.
Як перевірити продуктивність анімацій? Використовуйте Xcode Instruments (iOS) або Android Profiler для заміру часу кадру. Переконайтеся, що анімації не викликають перемальовку layout. Для Lottie перевірте, що кадрова частота не падає нижче 60 FPS. Якщо так — стискайте JSON або зменшуйте кількість шарів.

Процес роботи

  1. Збір UI-інвентаря: всі інтерактивні елементи в застосунку (в середньому 10–15) — наші сертифіковані інженери аналізують кожен.
  2. Узгодження з дизайнером: які елементи анімуються, які відчуття мають передавати (впевненість, легкість, терміновість).
  3. Розробка бібліотеки анімацій — перевикористовувані компоненти під кожен тип.
  4. Додавання haptic feedback там, де доречно.
  5. Перевірка на reduceMotion та оптимізація продуктивності.
  6. Інтеграція в проєкт та тестування на реальних пристроях.

Що входить у роботу

  • Аудит поточних інтерактивних елементів інтерфейсу
  • Узгодження сценаріїв анімації з дизайнером
  • Розробка бібліотеки перевикористовуваних компонентів (iOS/Android)
  • Інтеграція haptic feedback
  • Тестування на фізичних пристроях
  • Документація та гайд для дизайнера
  • Підтримка після впровадження

Орієнтири за строками

Бібліотека мікроанімацій для 10–15 елементів інтерфейсу — 2–3 робочих дні. Якщо потрібна анімація через Lottie з нуля (створення JSON аніматором) — це окремий етап від 1 до 3 днів. Оцінимо ваш проєкт безкоштовно та запропонуємо оптимальні строки.

Зв'яжіться з нами для оцінки вашого проєкту — ми допоможемо зробити інтерфейс чуйним та приємним для користувачів. Замовте мікроанімації під ключ та отримайте консультацію нашого інженера.

Анімації в мобільних додатках: Lottie, Rive, Spring та Reanimated

Ми зробили анімації для десятків проєктів — від ігрових інтерфейсів до bank-grade додатків. Знаємо, як змусити 120 fps працювати навіть на Android з ProGuard. Якщо анімація смикається — проблема не в інструменті, а у виборі підходу. Нижче покажемо, як обирати між Lottie та Rive, чому Spring physics перемагає UIView.animate, і як Reanimated 3 вичавлює 60 fps на старих пристроях. Отримайте консультацію щодо вашого проєкту — оцінимо анімаційний шар безкоштовно.

Чому UIView.animate ламається на складних сценаріях

UIView.animate(withDuration:) та ObjectAnimator на Android — правильний вибір для простих переходів. Але щойно анімація стає інтерактивною (користувач тягне елемент, швидкість залежить від жесту), потрібен інший підхід.

На iOS для gesture-driven анімації правильний інструмент — UIViewPropertyAnimator. Він дозволяє призупиняти, обертати та модифікувати анімацію в процесі. Типовий кейс: bottom sheet, який слідує за пальцем, продовжує рух з інерцією після відпускання та притягується до найближчої позиції. З UIView.animate це або не працює зовсім, або потребує ручної фізики.

У SwiftUI withAnimation працює з коробки, але інтерактивність обмежена — немає прямого аналога UIViewPropertyAnimator. Обхідний шлях: .gesture(DragGesture()) + @GestureState + явне обчислення позиції. Або йдемо в SwiftUI Animations API з Animation.spring(duration:bounce:).

Як React Native Reanimated обходить JS-міст

React Native Animated API виконує анімації в JS thread — це джерело джанка при завантаженому bridge. Reanimated 3 вирішує проблему через worklets: функції, які компілюються та виконуються прямо на UI thread без перетину JS-моста.

Приклад: parallax scroll header. На базовому Animated.Value при швидкому скролі FPS падає до 40-45 на mid-range Android. На Reanimated з useAnimatedScrollHandler — стабільні 60 fps, тому що весь перерахунок позиції відбувається на UI thread.

Reanimated 3 з useSharedValue, useAnimatedStyle та withSpring/withTiming — стандарт для анімацій у React Native. Gesture Handler v2 щільно інтегрований: useAnimatedGestureHandler замінює PanResponder і теж працює на UI thread.

Чому Lottie може знижувати FPS на Android і як це виправити

Lottie експортує After Effects анімацію в JSON. На iOS з lottie-ios працює стабільно, але на Android при складних ефектах (blur, частинки, градієнти) векторний рендеринг через Canvas призводить до просадок до 30-40 fps. Рішення — або спрощувати анімацію, або використовувати Rive з апаратним рендерингом. Ми тестували: Lottie-файл з розмиттям 5 МБ на Xiaomi Redmi Note 10 дає 48 fps, аналогічна анімація в Rive (.riv 400 КБ) — 60 fps. Rive працює в 1.25 раза швидше на однаковому пристрої, а при складних ефектах — до 4 разів легше за розміром.

Як вибрати між Lottie та Rive для вашого проєкту?

Обидва інструменти вирішують задачу «дизайнер робить анімацію, розробник додає файл». Але принципово по-різному.

Критерій Lottie Rive
Формат JSON векторна анімація Бінарний .riv
Інтерактивність Ні (лінійне відтворення) State Machine, реакції на ввід
Продуктивність Середня (blur/частинки важкі) Апаратний рендеринг Metal/OpenGL
Розмір файлу 2-5 МБ 200-500 КБ
Підтримка платформ iOS, Android, Web, Flutter, RN iOS, Android, Web, Flutter, RN

Вибір простий: статична декоративна анімація (splash screen, onboarding ілюстрації) — Lottie. Інтерактивні UI-елементи зі станами — Rive. Наприклад, кнопка з hover, pressed, loading, success — одна Rive-анімація з чотирма станами проти чотирьох окремих Lottie-файлів. Це зменшує обсяг коду та спрощує підтримку.

Як впровадити анімації Lottie за 4 кроки?

  1. Експорт з After Effects через плагін Bodymovin — отримуєте .json.
  2. Додавання файлу до ресурсів проєкту (assets або drawable).
  3. Ініціалізація плеєра — в iOS використовуйте LOTAnimationView, в Android — LottieAnimationView.
  4. Запуск з параметрамиloopMode, animationSpeed, contentMode. Для складних сценаріїв — кастомний AnimationListener.

На практиці цей підхід працює, але потребує контролю версій Lottie-файлів. Ми рекомендуємо версіонувати їх разом з кодом і тестувати на цільових пристроях.

Spring-фізика та Hero transitions: як досягти природності

Spring-анімація відчувається природньо тому що імітує фізику — масу, жорсткість і демпфування. У SwiftUI: Animation.spring(response:dampingFraction:). В Android Compose: spring(dampingRatio = Spring.DampingRatioMediumBouncy).

Для Hero-переходів (елемент «перелітає» між екранами) на iOS використовуємо UIViewControllerTransitioningDelegate + UIViewControllerAnimatedTransitioning. У SwiftUI — matchedTransitionSource + navigationTransition(.zoom). На Flutter — Hero віджет, який працює з коробки.

Як уникнути типових помилок у Hero transitions?

Анімація починається нормально, але на цільовому екрані елемент «стрибає» в фінальну позицію. Причина — AutoLayout constraints застосовуються до завершення анімації. Рішення: layoutIfNeeded() в блоці анімації або використання transform замість frame-змін. На Flutter — перевіряйте HeroFlightShuttleConfiguration. Також слідкуйте за VSync: на Android при 90 Гц дисплеї Hero-перехід може виглядати смиканим, якщо не виставлений Choreographer.

Таблиця: Строки виконання та типові сценарії

Задача Час Коментар
Базові екранні переходи та мікроінтеракції 1 тиждень Стандартні gesture-driven sheets, каруселі
Lottie/Rive інтеграція з дизайн-системою 3-5 днів Після отримання фінальних файлів
Кастомна інтерактивність з фізикою (сustom sheet, drawer) 1-2 тижні Включає тестування на 4+ пристроях

Що входить в роботу: анімаційний шар під ключ

  • Інтеграція Lottie/Rive-файлів в дизайн-систему
  • Код gesture-driven переходів (bottom sheets, drawers, каруселі)
  • Тестування на реальних пристроях (iOS, Android)
  • Документація з анімацій (архітектура, ключі станів)
  • Підтримка при оновленні дизайну (гарантія 30 днів)

У нас 5+ років досвіду в мобільній розробці, понад 30 проєктів з анімаціями, сертифіковані iOS/Android розробники. Замовте анімації під ключ — перша консультація безкоштовна. Напишіть нам у месенджер, щоб узгодити деталі.

Apple Developer Documentation – UIKit Animations використовується як базова специфікація.