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 का उपयोग करें। मॉडल विंडो प्रकट होने के लिए — damping = 0.6–0.8, stiffness = 300–500 के साथ। द्रव्यमान शायद ही कभी बदला जाता है — मानक मान 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 वक्र बेहतर हैं। स्क्रॉल स्थिति एनिमेशन के लिए, फ्लिंग के साथ सिस्टम 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 एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें