Spring Animation — اینیمیشن میں اسپرنگ کی طبیعیات

مصنف: IT Sectr اشاعت: 2026-03-01 مطالعے کا وقت: 10 منٹ

Spring Animation ایک اینیمیشن تکنیک ہے جو اسپرنگ کے طبعی رویے کی نقل کرتی ہے: کمیت، سختی (stiffness)، ڈیمپنگ (damping) اور ابتدائی رفتار۔ لکیری انٹرپولیشن اور بیزیئر منحنیوں کے برعکس، اسپرنگ اینیمیشن قدرتی حرکت پیدا کرتی ہے جس میں مخملی دوغلاپن کا اثر ہوتا ہے جو کسی بھی ڈیوائس پر نامیاتی لگتا ہے۔ Material Design Guidelines (2026) کے مطابق، Spring Animation App Store کے ٹاپ 100 ایپس میں 73% اینی میٹڈ انٹرفیس میں استعمال ہوتی ہے۔ دیگر اقسام کی اینیمیشن کے بارے میں مزید جاننے کے لیے جنرل اینیمیشن گائیڈ دیکھیں۔

اہم نکات

  • Spring Animation — کمیت اور ڈیمپنگ کے ساتھ طبعی اسپرنگ ماڈل پر مبنی اینیمیشن۔
  • Damping — دوغلاپن مخملی گتانک: 0 = لامحدود دوغلاپن، 1 = بغیر اوور شوٹ کے۔
  • Stiffness — اسپرنگ کی سختی: قدر جتنی زیادہ، توازن میں واپسی اتنی تیز۔
  • CASpringAnimation — دورانیہ حساب کے ساتھ CALayer کی اسپرنگ اینیمیشن کے لیے iOS کلاس۔
  • SpringAnimation — AndroidX Dynamic Animation لائبریری سے Android کلاس۔

Spring Animation کیا ہے؟

Spring Animation ایک اینیمیشن ہے جس کی حرکت کو مخملی ہارمونک اوسلیٹر مساوات سے بیان کیا گیا ہے۔ ایک مقررہ وقت میں 0 سے 1 تک قدر کو انٹرپولیٹ کرنے کے بجائے، Spring Animation طبعی پیرامیٹرز (کمیت، سختی، ڈیمپنگ اور ابتدائی رفتار) کی بنیاد پر ہر لمحے آبجیکٹ کی پوزیشن کا حساب لگاتی ہے۔ نتیجہ ایک قدرتی، نامیاتی حرکت ہے جو "مشینی" نہیں لگتی۔

Easing منحنیوں (easeIn, easeOut, cubic-bezier) کے برعکس، جہاں دورانیہ مقررہ اور مسیر پہلے سے طے شدہ ہوتی ہے، Spring Animation متحرک طور پر ڈھل جاتی ہے: اگر اینیمیشن کے دوران ہدف کی قدر بدل جائے تو اسپرنگ موجودہ پوزیشن سے مسیر کو آسانی سے دوبارہ حساب کرتا ہے۔ یہ خاص طور پر ان اینیمیشنز کے لیے اہم ہے جو روکی جا سکتی ہیں — ڈریگ ٹو ڈسمس، پل ٹو رفریش، سوائپ ایبل کارڈز۔

Apple WWDC 2025 کے مطابق، مقررہ منحنیوں کے بجائے اسپرنگ اینیمیشن استعمال کرنے سے شروع میں قدرتی سرعت اور آخر میں ہموار سستی کی بدولت محسوس ہونے والی تاخیر 30–50% کم ہو جاتی ہے۔ Spring Animation حرکت سے متعلق کسی بھی اینیمیشن کے لیے تجویز کی جاتی ہے: نقل مکانی، پیمائش تبدیلی، ظاہر ہونا/غائب ہونا۔

اسپرنگ کے طبعی پیرامیٹرز: damping اور stiffness

اسپرنگ کا رویہ چار پیرامیٹرز سے طے ہوتا ہے۔ Stiffness (سختی) توازن میں واپس لانے والی قوت ہے: 100–300 کی قدر فہرستوں کے لیے نرم اسپرنگ دیتی ہے، 500–1000 بٹن اور سوئچز کے لیے سخت اسپرنگ دیتی ہے۔ Damping (مخملی کرنا) حرکت کے خلاف مزاحمت ہے: 0 — لامحدود دوغلاپن، 0.1–0.5 — نمایاں مخملی دوغلاپن (اچھال اثر)، 1 — تنقیدی ڈیمپنگ (دوغلاپن کے بغیر، ہموار سستی)۔

پیرامیٹرحداثراستعمال کی مثال
Stiffness100–1000توازن میں واپسی کی رفتار200 = فہرست، 600 = بٹن
Damping0.0–1.0دوغلاپن مخملی کرنا0.3 = اچھال، 1.0 = دوغلاپن نہیں
Mass0.1–10.0آبجیکٹ کی جڑت1.0 = معیاری، 3.0 = بھاری عنصر
Initial Velocityکوئی بھیپکسل/سیکنڈ میں ابتدائی رفتارڈریگ ٹو ڈسمس پر انگلی کی رفتار

تنقیدی ڈیمپنگ (damping = 1.0) زیادہ تر UI اینیمیشنز کے لیے بہترین موڈ ہے: آبجیکٹ بغیر اوور شوٹ کے ممکنہ حد تک تیزی سے ہدف کی پوزیشن پر واپس آتا ہے۔ اچھال اثر کے لیے (مثلاً پل ٹو رفریش)، damping = 0.3–0.5 استعمال کریں۔ موڈل ونڈو ظاہر ہونے کے لیے — stiffness = 300–500 کے ساتھ damping = 0.6–0.8 استعمال کریں۔ کمیت شاذ و نادر ہی بدلی جاتی ہے — معیاری قدر 1.0 تقریباً تمام صورتوں کے لیے موزوں ہے۔

iOS میں Spring Animation (Swift)

iOS پر، Spring Animation iOS 7 سے UIView.animate(withDuration:delay:usingSpringWithDamping:initialSpringVelocity:) اور iOS 9 سے CASpringAnimation (Core Animation) کے ذریعے دستیاب ہے۔ UIView ورژن View کی خصوصیات (transform, alpha, center) کو اینی میٹ کرنے کے لیے آسان اور زیادہ مقبول ہے۔ CASpringAnimation زیادہ درست ہے اور stiffness، damping اور mass کو علیحدہ خصوصیات کے طور پر رسائی فراہم کرتی ہے۔

swift
import UIKit

// UIView.animate اسپرنگ پیرامیٹرز کے ساتھ
let originalCenter = view.center

UIView.animate(
    withDuration: 0.8,
    delay: 0,
    usingSpringWithDamping: 0.5,
    initialSpringVelocity: 0.3,
    options: [.curveEaseInOut, .allowUserInteraction]
) {
    view.center = CGPoint(x: originalCenter.x + 100, y: originalCenter.y)
    view.transform = CGAffineTransform(scaleX: 1.2, y: 1.2)
} completion: { _ in
    UIView.animate(withDuration: 0.3) {
        view.transform = .identity
    }
}

// CASpringAnimation — پیرامیٹرز پر عین کنٹرول
let spring = CASpringAnimation()
spring.keyPath = "transform.scale"
spring.fromValue = 1.0
spring.toValue = 1.5
spring.stiffness = 300
spring.damping = 10
spring.mass = 1.0
spring.initialVelocity = 5.0

"> CASpringAnimation.settlingDuration — شمار شدہ مدت
spring.duration = spring.settlingDuration
view.layer.add(spring, forKey: "scaleSpring")

CASpringAnimation.settlingDuration Core Animation کی ایک منفرد خصوصیت ہے جو اسپرنگ کے توازن تک پہنچنے کے لیے درکار کم از کم اینیمیشن دورانیہ کا حساب لگاتی ہے۔ اس کا مطلب ہے کہ آپ کو دستی طور پر دورانیہ منتخب کرنے کی ضرورت نہیں — نظام خود طے کرتا ہے کہ دوغلاپن مخملی ہونے میں کتنا وقت لگے گا۔ UIView.animate کے لیے، دورانیہ واضح طور پر مقرر کیا جاتا ہے، اور 0.3–0.7 کا damping نمایاں اچھال اثر دیتا ہے۔ UIPanGestureRecognizer کے ساتھ انضمام کے لیے، velocityRecognizer.velocity(in: view) کو initialSpringVelocity کے طور پر پاس کریں — اس طرح اینیمیشن انگلی کی حرکت کو اسی رفتار سے جاری رکھتی ہے۔

Android میں Spring Animation (Kotlin)

Android پر، SpringAnimation AndroidX Dynamic Animation لائبریری (androidx.dynamicanimation) کا حصہ ہے۔ مرکزی کلاس SpringAnimation ہے، جو View یا کسٹم آبجیکٹ کی کسی بھی float خصوصیت کو اینی میٹ کرتی ہے۔ پیرامیٹرز SpringForce کے ذریعے مقرر کیے جاتے ہیں — stiffness (ڈیفالٹ STIFFNESS_MEDIUM = 600) اور dampingRatio (ڈیفالٹ DAMPING_RATIO_MEDIUM_BOUNCY = 0.5)۔

kotlin
// build.gradle.kts
implementation("androidx.dynamicanimation:dynamicanimation:1.1.0")

// Kotlin: کسٹم SpringForce کے ساتھ SpringAnimation
import androidx.dynamicanimation.animation.SpringAnimation
import androidx.dynamicanimation.animation.SpringForce
import androidx.dynamicanimation.animation.FloatPropertyCompat

val springAnim = SpringAnimation(myView, SpringAnimation.TRANSLATION_X).apply {
    spring = SpringForce().apply {
        stiffness = SpringForce.STIFFNESS_LOW // 200.0f
        dampingRatio = SpringForce.DAMPING_RATIO_LOW_BOUNCY // 0.2f
        finalPosition = 300f
    }
    start()
}

// اشارے سے ابتدائی رفتار کے ساتھ SpringAnimation
myView.setOnTouchListener { _, event ->
    when (event.action) {
        MotionEvent.ACTION_DOWN -> {
            springAnim.cancel()
            false
        }
        MotionEvent.ACTION_UP -> {
            val velocity = velocityTracker?.getXVelocity() ?: 0f
            SpringAnimation(myView, SpringAnimation.TRANSLATION_X).apply {
                spring = SpringForce(0f) "> اصل پوزیشن پر واپسی
                setStartVelocity(velocity)
                start()
            }
            true
        }
        else -> false
    }
}

"> حسب ضرورت پراپرٹی کے لیے SpringAnimation
val customAnim = SpringAnimation(
    myObject,
    object : FloatPropertyCompat<MyClass>("progress") {
        override fun getValue(obj: MyClass): Float = obj.progress
        override fun setValue(obj: MyClass, value: Float) { obj.progress = value }
    }
).apply { start() }

SpringForce مستقلات: STIFFNESS_LOW (200), STIFFNESS_MEDIUM (600), STIFFNESS_HIGH (1800); DAMPING_RATIO_HIGH_BOUNCY (0.2), DAMPING_RATIO_MEDIUM_BOUNCY (0.5), DAMPING_RATIO_LOW_BOUNCY (0.75), DAMPING_RATIO_NO_BOUNCY (1.0)۔ آئٹم اینیمیشن کے ساتھ RecyclerView کے لیے، وسائل آزاد کرنے کے لیے DynamicAnimation.OnAnimationEndListener کے ساتھ SpringAnimation استعمال کریں۔ متعدد خصوصیات کو اینی میٹ کرنے کے لیے، SpringAnimation.createFor(view, property) استعمال کریں۔

Jetpack Compose: Compose 1.0 سے شروع کرتے ہوئے، اسپرنگ اینیمیشن spring() کے ساتھ Animatable کے ذریعے دستیاب ہے — animationSpec = spring(dampingRatio = 0.5f, stiffness = 300f)۔ یہ Compose پروجیکٹس کے لیے ترجیحی طریقہ ہے، کیونکہ DynamicAnimation کا SpringAnimation صرف View سسٹم کے ساتھ ہم آہنگ ہے۔ spring کا Compose ورژن ایک ہی فزکس انجن استعمال کرتا ہے لیکن Compose Animation System کے سیاق و سباق میں کام کرتا ہے، علیحدگی پر خود بخود رک جاتا ہے۔

Spring Animation بمقابلہ Easing: کب کیا انتخاب کریں

Spring Animation اور Easing منحنیاں (easeInOut, FastOutSlowIn, decelerate) مختلف مسائل حل کرتی ہیں۔ Easing منحنیاں مقررہ وقت کے ساتھ ریاضیاتی طور پر طے شدہ مسیریں ہیں۔ Spring ایک طبعی تخیل ہے جہاں وقت پیرامیٹرز اور ابتدائی حالات پر منحصر ہوتا ہے۔ سادہ ظاہر/غائب اینیمیشنز کے لیے، Easing منحنیاں کافی ہیں۔ صارف کی حرکت (ڈریگ، سوائپ، اسکرول) سے منسلک اینیمیشنز کے لیے، Spring Animation زیادہ قدرتی ردعمل فراہم کرتی ہے۔

منظرسفارشپیرامیٹرز
عنصر کا ظہورSpring (damping = 0.7, stiffness = 400)ہلکے اوور شوٹ کے ساتھ ہموار ظہور
سوائپ ٹو ڈسمسSpring + ابتدائی رفتارsetStartVelocity(velocity), damping = 0.5
آئیکن اینیمیشنSpring (damping = 0.3, stiffness = 600)زور دار اثرات کے لیے نمایاں اچھال
اسکرول فزکسSpring (سسٹم)اپنی مرضی نہ بدلیں — Android خود منظم کرتا ہے
سائز تبدیلیEasing (FastOutSlowIn)لی آؤٹ تبدیلیوں کے لیے Easing زیادہ قابل بھروسہ

اینٹی پیٹرن: لی آؤٹ پیرامیٹرز (LayoutParams کے ذریعے View چوڑائی/اونچائی) کو اینی میٹ کرنے کے لیے Spring Animation استعمال نہ کریں — یہ ہر فریم پر درجہ بندی کا دوبارہ حساب کرواتا ہے، جس سے جھٹکے اور FPS میں کمی آتی ہے۔ رنگ کی اینیمیشن کے لیے بھی Easing منحنیاں ترجیح دی جاتی ہیں۔ اسکرول پوزیشن اینیمیشن کے لیے، fling کے ساتھ سسٹم Scroller استعمال کریں — Spring Animation یہاں کوئی فائدہ نہیں دیتی۔ Android پر زیادہ سے زیادہ کارکردگی کے لیے، بیک وقت فعال SpringAnimation مثالوں کی تعداد 10–15 تک محدود کریں۔

اکثر پوچھے جانے والے سوالات

damping اور stiffness میں کیا فرق ہے؟

Stiffness اسپرنگ کی سختی ہے (واپس لانے والی قوت)۔ زیادہ قدر (1000) تیز، تیز حرکت پیدا کرتی ہے۔ کم قدر (100) نرم، سست حرکت پیدا کرتی ہے۔ Damping حرکت کے خلاف مزاحمت ہے۔ کم قدر (0.2) اچھال کے ساتھ لمبے دوغلاپن پیدا کرتی ہے۔ زیادہ قدر (1.0) دوغلاپن کے بغیر، ہموار سستی پیدا کرتی ہے۔ Stiffness رفتار طے کرتا ہے، damping دوغلاپن کی موجودگی اور شدت طے کرتا ہے۔

Spring Animation کے صحیح پیرامیٹرز کیسے منتخب کریں؟

damping = 0.5 اور stiffness = 400 سے شروع کریں — یہ iOS اور Android کے لیے ایک عالمگیر ابتدائی سیٹ ہے۔ عنصر ظہور کے لیے، damping کو 0.7 تک بڑھائیں۔ زور دار اثرات (پسند، کارٹ میں شامل) کے لیے، damping کو 0.3 تک کم کریں اور stiffness = 600 رکھیں۔ Material Motion کے لیے، damping = 0.6 اور stiffness = 300 استعمال کریں۔ اینیمیشن کو سمیلیٹر کے بجائے حقیقی ڈیوائس پر ٹیسٹ کریں۔

کیا Spring Animation SwiftUI میں کام کرتی ہے؟

ہاں، SwiftUI میں اسپرنگ اینیمیشن .animation(.spring(dampingFraction: 0.5, response: 0.5), value: state) یا withAnimation میں .spring(blendDuration: 0.3) کے ذریعے مقرر کی جاتی ہے۔ response اور dampingFraction UIKit کے stiffness اور damping کی عکاسی کرتے ہیں۔ انٹرایکٹو ڈریگ اینیمیشنز کے لیے .interactiveSpring() استعمال کریں — ڈریگ اینیمیشنز کے لیے موزوں کردہ اشارہ پر مبنی ابتدائی رفتار والا خصوصی ورژن۔

Android پر Spring Animation کیوں نہیں رکتی؟

SpringForce.finalPosition چیک کریں — اگر یہ مقرر نہیں ہے یا موجودہ قدر کے برابر ہے تو اینیمیشن شروع نہیں ہو سکتی۔ Activity/Fragment کے onPause() میں springAnim.cancel() کال کریں۔ RecyclerView میں SpringAnimation کے لیے، view.setOnDetachListener { animator.cancel() } استعمال کریں۔ Jetpack Compose کے لیے، SpringAnimation ترکیب تبدیلیوں پر خود بخود رک جاتی ہے۔

کیا Spring Animation کو آسانی سے روکا جا سکتا ہے؟

ہاں۔ iOS پر، view.layer.removeAnimation(forKey:) کال کریں — اینیمیشن موجودہ فریم پر رک جاتی ہے۔ Android پر، springAnim.cancel() کال کریں — آبجیکٹ موجودہ پوزیشن پر رہتا ہے۔ نئی ہدف قدر میں ہموار منتقلی کے لیے، finalPosition اپ ڈیٹ کریں اور cancel کال نہ کریں — SpringAnimation خود بخود مسیر کا دوبارہ حساب کرتی ہے۔ SkipToEnd کے لیے، Android پر springAnim.skipToEnd() استعمال کریں۔

خلاصہ

  • Spring Animation — stiffness اور damping پیرامیٹرز کے ساتھ طبعی اسپرنگ ماڈل پر مبنی اینیمیشن۔
  • Damping — مخملی گتانک (0 = لامحدود دوغلاپن، 1 = تنقیدی ڈیمپنگ)۔
  • Stiffness — اسپرنگ کی سختی: Android پر 200 (نرم)، 600 (درمیانہ)، 1800 (زیادہ)۔
  • iOS: usingSpringWithDamping (UIKit) کے ساتھ UIView.animate یا CASpringAnimation (Core Animation)۔
  • Android: AndroidX Dynamic Animation سے SpringAnimation + SpringForce۔
  • Jetpack Compose: Animatable کے ذریعے animationSpec = spring(dampingRatio, stiffness)۔
  • Spring Animation اشارہ پر مبنی اینیمیشنز (سوائپ، ڈریگ، پل ٹو رفریش) کے لیے Easing سے بہتر ہے۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں