انیمیشن در توسعه موبایل: چیست، چه انواعی دارد و چگونه استفاده کنیم

نویسنده: IT Sectr منتشر شده: 2026-02-26 زمان مطالعه: 10 دقیقه

انیمیشن اپلیکیشن‌های موبایل آنها را زنده و پاسخگو می‌کند، توجه کاربر را هدایت کرده و درک رابط را بهبود می‌بخشد. در این مقاله انواع اصلی انیمیشن‌ها در iOS و Android را بررسی خواهیم کرد: Property Animation، View Animation، UIKit Dynamics، Core Animation، Lottie، Rive، Spring Animation، Hero Animation و Shared Element Transition. این مطالب به توسعه‌دهندگان مبتدی کمک می‌کند تا بفهمند برای یک کار خاص چه ابزارها و کتابخانه‌هایی را انتخاب کنند. جزئیات بیشتر — در مستندات رسمی Android Animations.

نکات اصلی

  • Property Animation (Android) ویژگی‌های واقعی شیء را تغییر می‌دهد، View Animation — فقط نمایش بصری
  • Core Animation و UIView.animate (iOS) قابلیت‌های داخلی برای انیمیشن لایه‌ها و نماها فراهم می‌کنند
  • Lottie و Rive امکان جاسازی انیمیشن برداری پیچیده از After Effects و Rive Editor را فراهم می‌کنند
  • Hero Animation (Shared Element Transition) انتقال‌های روان بین صفحه‌ها ایجاد می‌کند
  • Spring Animation با فیزیک فنر و Easing (Interpolator) انیمیشن را طبیعی می‌کنند

انیمیشن در Android: Property Animation و View Animation

Android دو سیستم اصلی انیمیشن ارائه می‌دهد: View Animation (قدیمی) و Property Animation (مدرن). View Animation (یا Tween Animation) فقط با نمایش بصری کار می‌کند — نمایش View را تغییر می‌دهد اما ویژگی‌های واقعی آن را تغییر نمی‌دهد (به عنوان مثال، مختصات کلیک در جای خود باقی می‌مانند). Property Animation که در Android 3.0 معرفی شد، ویژگی‌های واقعی شیء را از طریق Animator — ValueAnimator، ObjectAnimator یا AnimatorSet تغییر می‌دهد.

ObjectAnimator و ValueAnimator

ObjectAnimator محبوب‌ترین کلاس Property Animation است. یک ویژگی خاص شیء (به عنوان مثال، translationX، alpha، scaleY) را در مدت زمان مشخص با Interpolator معین انیمیشن می‌کند.

kotlin
ObjectAnimator.ofFloat(myView, "translationX", 0f, 300f).apply {
    duration = 500
    interpolator = FastOutSlowInInterpolator()
    startDelay = 200
}.start()

ValueAnimator به یک شیء خاص متصل نیست — مقادیری تولید می‌کند که می‌توان برای هر ویژگی یا منطق سفارشی استفاده کرد.

View Animation و انیمیشن‌های XML

View Animation در فایل‌های XML res/anim/ توصیف می‌شود. چهار نوع پشتیبانی می‌شود: scale، translate، rotate، alpha. نقص این است که انیمیشن پارامترهای واقعی View را تغییر نمی‌دهد. برای جلوه‌های ساده (چشمک زدن، چرخش) View Animation هنوز قابل استفاده است، اما برای پروژه‌های جدید Property Animation توصیه می‌شود.

انیمیشن در Jetpack Compose

Jetpack Compose یک API انیمیشن مدرن ارائه می‌دهد: animateAsState، Animatable، AnimatedVisibility و AnimatedContent. انیمیشن در Compose واکنش‌گرا است: وقتی وضعیت تغییر می‌کند، انیمیشن به طور خودکار شروع می‌شود.

kotlin
var expanded = remember { mutableStateOf(false) }
val size = animateAsState(
    if (expanded) 200f else 50f
)
Box(
    modifier = Modifier
        .size(size.value, size.value)
        .clickable { expanded = !expanded }
        .background(Color.Blue)
)

انیمیشن در iOS: Core Animation و UIView.animate

iOS یک پشته انیمیشن قدرتمند مبتنی بر Core Animation — یک فریمورک سطح پایین که با CALayer کار می‌کند — ارائه می‌دهد. UIKit بر روی Core Animation با روش‌های راحت UIView.animate و UIViewPropertyAnimator ساخته شده است.

UIView.animate

UIView.animate ساده‌ترین راه برای انیمیشن در iOS است. اجازه می‌دهد frame، alpha، transform، backgroundColor و سایر ویژگی‌های UIView را انیمیشن کنید.

swift
UIView.animate(
    withDuration: 0.5,
    delay: 0.2,
    usingSpringWithDamping: 0.6,
    initialSpringVelocity: 1.0,
    options: [.curveEaseInOut]
) {
    myView.frame.origin.x += 300
    myView.alpha = 0.5
}

UIKit Dynamics

UIKit Dynamics — یک فریمورک برای انیمیشن فیزیکی: گرانش، برخوردها، فنرها، نیروهای جاذبه. امکان ایجاد رفتار واقع‌گرایانه اشیاء بدون محاسبه دستی فیزیک را فراهم می‌کند. برای انتقال‌های سفارشی، منوهای انیمیشنی و عناصر بازی استفاده می‌شود.

CAAnimation و Core Animation

Core Animation (CAAnimation، CABasicAnimation، CAKeyframeAnimation) — یک API سطح پایین برای انیمیشن CALayer. از تبدیل‌های سه‌بعدی، انیمیشن مسیر (keyframe)، ماسک‌گذاری و ترکیب پشتیبانی می‌کند. SwiftUI از Core Animation در پشت صحنه از طریق اصلاح‌کننده‌های animation و withAnimation استفاده می‌کند.

swift
let animation = CABasicAnimation(keyPath: "transform.rotation.z")
animation.fromValue = 0
animation.toValue = CGFloat.pi * 2
animation.duration = 1.0
animation.repeatCount = .infinity
myLayer.add(animation, forKey: "rotation")

برای اکثر پروژه‌های iOS از SwiftUI با انیمیشن داخلی آن استفاده می‌شود. به عنوان مثال، withAnimation تغییرات وضعیت را در یک زمینه انیمیشنی می‌پیچد.

انیمیشن برداری: Lottie و Rive

انیمیشن‌های پیچیده (شخصیت‌ها، انتقال‌ها، بارگذارها) پیاده‌سازی با کد دشوار است. Lottie و Rive این مشکل را با اجازه دادن به طراحان برای ایجاد انیمیشن در ویرایشگرهای بصری و توسعه‌دهندگان برای جاسازی آن در برنامه به عنوان یک جزء آماده حل می‌کنند.

Lottie

Lottie — کتابخانه‌ای از Airbnb (اکنون LottieFiles) که انیمیشن‌های Adobe After Effects صادر شده در قالب JSON را رندر می‌کند. در Android، iOS، Flutter، React Native و Web پشتیبانی می‌شود. انیمیشن‌های Lottie برداری هستند، بدون افت کیفیت مقیاس می‌شوند و می‌توان آنها را به صورت برنامه‌نویسی سفارشی کرد (سرعت، پیشرفت، رنگ‌ها).

kotlin
// Android
import com.airbnb.lottie.LottieAnimationView
val lottieView = findViewById<LottieAnimationView>(R.id.lottieView)
lottieView.setAnimation(R.raw.loading_animation)
lottieView.playAnimation()

Rive

Rive (قبلاً 2Dimensions) — ابزاری پیشرفته‌تر برای انیمیشن برداری. برخلاف Lottie، Rive از انیمیشن تعاملی پشتیبانی می‌کند: حالت‌ها، محرک‌ها، انتقال‌ها. انیمیشن در Rive Editor ایجاد می‌شود و در برنامه از طریق State Machine کنترل می‌شود. Rive برای رابط‌های بازی، آیکون‌های انیمیشنی و انتقال‌های پیچیده با بازخورد مناسب است.

در IT Sectr ما از Lottie برای انیمیشن‌های تزئینی (بارگذارها، عملیات موفق، حالت‌های خالی) و از Rive برای عناصر تعاملی صفحه‌های راه‌اندازی استفاده می‌کنیم. این کار زمان توسعه انیمیشن را تا ۶۰٪ در مقایسه با پیاده‌سازی دستی در UIKit یا Canvas کاهش می‌دهد.

Shared Element Transition و Hero Animation

Shared Element Transition — انیمیشنی که در آن یک عنصر (تصویر، متن، کارت) هنگام انتقال بین صفحه‌ها به آرامی حرکت می‌کند و تغییر شکل می‌دهد. این توهم تداوم را ایجاد می‌کند: کاربر به یک صفحه جدید «نمی‌رود»، بلکه در عنصر «سقوط می‌کند».

Android Shared Element Transition

در Android انتقال از طریق ActivityOptionsCompat و ویژگی‌های transitionName پیاده‌سازی می‌شود. FragmentTransaction از addSharedElement برای انتقال‌های داخل Activity پشتیبانی می‌کند. Compose از SharedTransitionLayout با SharedContentState استفاده می‌کند.

iOS Hero Transition

iOS انتقال Hero داخلی ندارد، اما کتابخانه Hero (توسط Luke Zhao) این الگو را در UIKit پیاده‌سازی می‌کند. فقط به عناصر در هر دو صفحه یک id اختصاص دهید — Hero به طور خودکار یک انتقال روان ایجاد می‌کند. در SwiftUI، انیمیشن انتقال از طریق NavigationStack و matchedGeometryEffect داخلی است.

Flutter Hero

Flutter یک ویجت Hero داخلی با پارامتر tag دارد. وقتی دو صفحه حاوی Hero با tag یکسان هستند، Flutter به طور خودکار انتقال بین آنها را انیمیشن می‌کند. این یکی از ساده‌ترین راه‌ها برای پیاده‌سازی انیمیشن پیچیده در یک اپلیکیشن موبایل است.

dart
Hero(
    tag: 'profile_avatar',
    child: CircleAvatar(
        backgroundImage: AssetImage('avatar.jpg'),
        radius: 50,
    ),
)

Spring Animation، Interpolator و Easing

برای اینکه انیمیشن طبیعی به نظر برسد، از منحنی‌های سرعت استفاده می‌شود — Interpolator در Android و Easing در iOS. آنها تعیین می‌کنند که سرعت انیمیشن از ابتدا تا انتها چگونه تغییر می‌کند.

Interpolatorهای Android

Android از چندین Interpolator داخلی پشتیبانی می‌کند: LinearInterpolator (یکنواخت)، AccelerateDecelerateInterpolator (کند-سریع-کند)، FastOutSlowInInterpolator (Material Design)، OvershootInterpolator (با بیش‌روی) و BounceInterpolator (با جهش). Interpolator سفارشی را می‌توان از طریق XML یا کلاس TimeInterpolator ایجاد کرد.

Interpolator رفتار استفاده
LinearInterpolatorسرعت ثابتنشانگرهای بارگذاری، چرخش‌های بی‌نهایت
FastOutSlowInInterpolatorشروع سریع، پایان نرمMaterial Design، ظاهر شدن کارت‌ها
OvershootInterpolatorهدف را رد کرده و برمی‌گرددعناصر تأکیدی، دکمه‌ها
BounceInterpolatorجهش در پایانفهرست‌ها، کشیدن برای به‌روزرسانی

Spring Animation

Spring Animation (انیمیشن فنری) فیزیک فنر را با پارامترهای damping (میرایی) و stiffness (سفتی) مدل می‌کند. میرایی ۰ — نوسانات بی‌نهایت، ۱ — بدون نوسان. سفتی سرعت بازگشت را تعیین می‌کند. Spring Animation در iOS (UIViewPropertyAnimator با UISpringTimingParameters)، Android (SpringAnimation از physics2) و SwiftUI (spring()) در دسترس است.

مستندات Spring Animation در Android شامل مثال‌های پیکربندی دقیق است.

انیمیشن جدول زمانی

Timeline (جدول زمانی) — رویکردی که در آن انیمیشن به فریم‌هایی در طول زمان تقسیم می‌شود. برای توالی‌های پیچیده استفاده می‌شود که در آن AnimationSet یا انیمیشن گروهی به اندازه کافی انعطاف‌پذیر نیستند. Android از AnimatorSet، iOS از CAAnimationGroup، Flutter از Interval در AnimationController پشتیبانی می‌کند.

Часто задаваемые вопросы

تفاوت Property Animation با View Animation چیست؟

View Animation (Android) فقط نمایش بصری View را بدون تغییر ویژگی‌های واقعی تغییر می‌دهد (موقعیت کلیک تغییر نمی‌کند). Property Animation ویژگی‌های واقعی شیء را تغییر می‌دهد و رفتار انعطاف‌پذیرتر و قابل پیش‌بینی‌تری ارائه می‌دهد. برای پروژه‌های جدید همیشه از Property Animation استفاده کنید.

Hero Animation چیست؟

Hero Animation انیمیشنی است که در آن یک عنصر هنگام انتقال بین صفحه‌ها به آرامی حرکت کرده و تغییر شکل می‌دهد و توهم تداوم را ایجاد می‌کند. از طریق Hero (Flutter)، SharedElementTransition (Android) یا matchedGeometryEffect (SwiftUI) پیاده‌سازی می‌شود.

Lottie و Rive برای چه مواردی استفاده می‌شوند؟

Lottie و Rive کتابخانه‌هایی برای رندر انیمیشن برداری در زمان اجرا هستند. طراح انیمیشن را در After Effects (Lottie) یا Rive Editor ایجاد می‌کند، به JSON صادر می‌کند و توسعه‌دهنده بدون نوشتن دستی کد انیمیشن آن را جاسازی می‌کند.

Spring Animation چیست و چرا مفید است؟

Spring Animation فیزیک فنر را مدل می‌کند: انیمیشن دارای میرایی طبیعی و «جهش» است. SwiftUI و Jetpack Compose از انیمیشن‌های spring به صورت بومی پشتیبانی می‌کنند و رابط را زنده‌تر و پاسخگوتر می‌کنند.

چگونه Interpolator مناسب را انتخاب کنیم؟

انتخاب به زمینه بستگی دارد: FastOutSlowIn — برای ظاهر شدن عناصر، Overshoot — برای تأکید، Linear — برای نشانگرهای بارگذاری، Bounce — برای فهرست‌ها. Material Design منحنی‌های استاندارد را توصیه می‌کند: standard easing، deceleration easing و acceleration easing.

خلاصه

  • Property Animation (Android ObjectAnimator) — استاندارد مدرن جایگزین View Animation
  • iOS از UIView.animate و Core Animation برای کنترل انیمیشن در سطح لایه استفاده می‌کند
  • Lottie و Rive جاسازی انیمیشن برداری پیچیده از ابزارهای طراحی را ساده می‌کنند
  • Hero Animation (Shared Element Transition) درک ناوبری بین صفحه‌ها را بهبود می‌بخشد
  • Spring Animation و انتخاب صحیح Interpolator / Easing انیمیشن را طبیعی می‌کند
  • Flutter یک ویجت Hero داخلی برای انتقال‌ها و AnimationController برای انیمیشن سفارشی ارائه می‌دهد
  • Jetpack Compose و SwiftUI دارای انیمیشن واکنش‌گرای داخلی از طریق animateAsState و withAnimation هستند

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه