SwiftUI राज्य में परिवर्तन को एनिमेट करता है। जब isExpanded जैसा मान withAnimation(.spring) के अंदर बदलता है, तो उस पर निर्भर प्रत्येक दृश्य स्प्रिंग का उपयोग करके अपने नए लेआउट में चला जाता है।
iOS 17 और बाद में, स्प्रिंग का वर्णन करने का सबसे सरल तरीका दो मानों के साथ है: अवधि, मोटे तौर पर इसे व्यवस्थित होने में कितना समय लगता है, और बाउंस, यह कितना ओवरशूट करता है। 0 का उछाल बिना किसी ओवरशूट के सहज गति देता है; उच्च मान उछाल जोड़ते हैं। Apple प्रीसेट भी प्रदान करता है: .smooth, .snappy और .bouncy।
पुराना कोड .spring(response:dampingFraction:) का उपयोग करता है। प्रतिक्रिया अवधि के समान है, और 1 के अवमंदन अंश का मतलब कोई उछाल नहीं है जबकि कम मान उछाल जोड़ते हैं। दोनों रूप एक ही भौतिक वसंत का वर्णन करते हैं।
स्प्रिंग्स का बड़ा फायदा रुकावट है। यदि कोई उपयोगकर्ता दोबारा टैप करता है या ड्रैग जेस्चर एनीमेशन के बीच में समाप्त हो जाता है, तो नया स्प्रिंग वर्तमान स्थिति और वेग से शुरू होता है, इसलिए कोई छलांग नहीं होती है। ड्रैग जेस्चर के लिए, उपयोगकर्ता द्वारा जारी किए जाने पर जेस्चर के वेग को पास करें, ताकि तत्व उसी दिशा में जारी रहे जिस दिशा में उसे फेंका गया था।
यदि समान घटक को वेब या एंड्रॉइड पर भी चलाने की आवश्यकता है, तो स्प्रिंग मानों को साझा गति टोकन के रूप में रखने से मदद मिलती है। ExodeUI, जिसे हम बनाते हैं, में SwiftUI रनटाइम है, इसलिए इसके स्प्रिंग्स के साथ एक डिज़ाइन किया गया घटक SwiftUI और अन्य प्लेटफार्मों पर चल सकता है।