UIKit Dynamics iOS (UIKit) में भौतिक एनिमेशन फ्रेमवर्क है जो View को वास्तविक भौतिकी के नियमों के अनुसार इंटरैक्ट करने देता है: गुरुत्वाकर्षण, टकराव, लोच और आकर्षण बल। यह लेख UIDynamicAnimator के घटकों, व्यवहार (behavior) के प्रकार और व्यावहारिक उपयोग के परिदृश्यों की व्याख्या करता है।
मुख्य बिंदु
UIKit Dynamics Apple द्वारा iOS 7 (2013) में पेश किया गया भौतिक सिमुलेशन फ्रेमवर्क है। UIView.animate (रैखिक संक्रमण) और Core Animation (लेयर एनिमेशन) के विपरीत, UIKit Dynamics वास्तविक भौतिक इंटरैक्शन का अनुकरण करता है: गुरुत्वाकर्षण, टकराव, बल, लोच और घर्षण। डेवलपर UIDynamicAnimator में व्यवहार जोड़ता है और सिस्टम स्वचालित रूप से प्रत्येक फ्रेम के लिए भौतिकी की गणना करता है।
फ्रेमवर्क 60/120 FPS पर चलता है और रिजिड बॉडी सिमुलेशन पर आधारित अंतर्निहित भौतिकी इंजन का उपयोग करता है। UIKit Dynamics को भौतिकी या गणित के ज्ञान की आवश्यकता नहीं है — बस तैयार व्यवहार लागू करें और पैरामीटर कॉन्फ़िगर करें।
Apple के अनुसार, UIKit Dynamics UI प्रभावों (कार्ड स्टैक एनिमेशन, आइकन वॉबलिंग, इंटरफ़ेस भौतिकी) के लिए उपयुक्त है, लेकिन गेम के लिए अभिप्रेत नहीं है — गेम के लिए SceneKit या SpriteKit का उपयोग करें।
UIDynamicAnimator UIKit Dynamics का केंद्रीय वर्ग है। यह reference view (आमतौर पर कंट्रोलर का view) के साथ आरंभ होता है और सभी सक्रिय व्यवहारों का प्रबंधन करता है। प्रत्येक फ्रेम UIDynamicAnimator भौतिक नियमों के अनुसार सभी जोड़े गए तत्वों की स्थिति, वेग और त्वरण की पुनर्गणना करता है।
विधि addBehavior एक व्यवहार (या जटिल UIDynamicBehavior) जोड़ती है, removeBehavior इसे हटाती है। जब सभी ऑब्जेक्ट विश्राम की स्थिति में पहुँच जाते हैं तो एनिमेटर स्वचालित रूप से रुक जाता है (बिना टकराव और बलों के जारी रहना)। डेलिगेट विधि — UIDynamicAnimatorDelegate — सिमुलेशन के ठहराव और पुनरारंभ के बारे में सूचित करती है।
भौतिकी में भाग लेने वाले किसी भी ऑब्जेक्ट को UIDynamicItem प्रोटोकॉल लागू करना चाहिए। UIView और UICollectionViewLayoutAttributes पहले से ही इसे लागू करते हैं। प्रोटोकॉल को गुणों की आवश्यकता है: bounds, center, transform। यदि ऑब्जेक्ट कस्टम है — प्रोटोकॉल को मैन्युअल रूप से लागू करें।
UIKit Dynamics में सात अंतर्निहित प्रकार के व्यवहार शामिल हैं, प्रत्येक एक विशिष्ट भौतिक प्रभाव का मॉडल बनाता है। व्यवहारों को संयोजित किया जा सकता है: उदाहरण के लिए, गुरुत्वाकर्षण + टकराव + लोच गिरने और उछलने वाली वस्तुओं का प्रभाव पैदा करते हैं।
| Behavior | भौतिक प्रभाव | मुख्य पैरामीटर |
|---|---|---|
| UIGravityBehavior | गुरुत्वाकर्षण (बल वेक्टर) | gravityDirection (dx, dy), magnitude |
| UICollisionBehavior | ऑब्जेक्ट और सीमा टकराव | collisionMode, translucence, collisionDelegate |
| UIAttachmentBehavior | संबंध (स्प्रिंग/केबल) | anchorPoint, length, damping, frequency |
| UISnapBehavior | डंपिंग के साथ बिंदु पर स्नैप | snapPoint, damping (0-1) |
| UIPushBehavior | धक्का/आवेग (निरंतर या तत्काल) | pushDirection, magnitude, mode |
| UIDynamicItemBehavior | ऑब्जेक्ट के भौतिक गुण | elasticity, friction, density, resistance |
| UIFieldBehavior | बल क्षेत्र (भंवर, चुंबकीय, रेडियल) | position, strength, falloff, region |
यथार्थवादी ऑब्जेक्ट भौतिकी के लिए एक साथ कई व्यवहारों की आवश्यकता होती है। उदाहरण के लिए, गिरते कार्ड के लिए: UIGravityBehavior (गुरुत्वाकर्षण बल), UICollisionBehavior (नीचे से टकराव), UIDynamicItemBehavior (लोच: 0.4 उछाल के लिए)। सभी व्यवहार एक UIDynamicAnimator में जोड़े जाते हैं।
UIKit Dynamics के लिए Swift कोड UIDynamicAnimator बनाता है और व्यवहार जोड़ता है। नीचे दिया गया उदाहरण कई ऑब्जेक्ट्स के साथ गुरुत्वाकर्षण, टकराव और कस्टम भौतिक गुणों को प्रदर्शित करता है।
import UIKit
class PhysicsViewController: UIViewController {
var animator: UIDynamicAnimator!
override func viewDidLoad() {
super.viewDidLoad()
// 1. reference view के साथ एनिमेटर बनाएँ
animator = UIDynamicAnimator(referenceView: view)
// 2. गिरने वाली वस्तुएँ बनाएँ
let redView = UIView(frame: CGRect(x: 100, y: 50, width: 60, height: 60))
redView.backgroundColor = .systemRed
redView.layer.cornerRadius = 8
view.addSubview(redView)
let blueView = UIView(frame: CGRect(x: 200, y: 30, width: 60, height: 60))
blueView.backgroundColor = .systemBlue
blueView.layer.cornerRadius = 8
view.addSubview(blueView)
// 3. गुरुत्वाकर्षण
let gravity = UIGravityBehavior(items: [redView, blueView])
gravity.gravityDirection = CGVector(dx: 0, dy: 1)
gravity.magnitude = 0.8
animator.addBehavior(gravity)
// 4. टकराव
let collision = UICollisionBehavior(items: [redView, blueView])
collision.translatesReferenceBoundsIntoBoundary = true
collision.collisionDelegate = self
animator.addBehavior(collision)
// 5. भौतिक गुण
let itemBehavior = UIDynamicItemBehavior(items: [redView, blueView])
itemBehavior.elasticity = 0.6
itemBehavior.friction = 0.3
itemBehavior.density = 1.0
animator.addBehavior(itemBehavior)
// 6. टैप पर Snap व्यवहार
let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap))
view.addGestureRecognizer(tap)
}
@objc
func handleTap(_ gesture: UITapGestureRecognizer) {
let point = gesture.location(in: view)
// प्रत्येक ऑब्जेक्ट के लिए Snap व्यवहार
for subview in view.subviews where subview is UIView {
animator.removeAllBehaviors()
let snap = UISnapBehavior(item: subview, snapTo: point)
snap.damping = 0.5
animator.addBehavior(snap)
}
}
}
extension PhysicsViewController: UICollisionBehaviorDelegate {
func collisionBehavior(_ behavior: UICollisionBehavior,
beganContactFor item1: UIDynamicItem,
with item2: UIDynamicItem,
at point: CGPoint) {
print("टकराव पर: (बिंदु)")
}
}उदाहरण गुरुत्वाकर्षण, टकराव और भौतिक गुणों के साथ दो View बनाता है। टैप पर UISnapBehavior 0.5 डंपिंग के साथ ऑब्जेक्ट को स्पर्श बिंदु पर खींचता है। UICollisionBehaviorDelegate ध्वनि और दृश्य प्रभावों के लिए टकराव की शुरुआत को ट्रैक करता है।
UIKit Dynamics का उपयोग iOS ऐप्स में गैर-गेम इंटरफ़ेस भौतिकी के लिए किया जाता है। लोकप्रिय परिदृश्य: कार्ड स्टैक एनिमेशन (केंद्र में खींचने के लिए UISnapBehavior), त्रुटि पर स्क्रीन शेक (UIDynamicItemBehavior + UIPushBehavior), ऑनबोर्डिंग में "गिरते तारे" प्रभाव (gravity + collision + field behavior)।
प्रदर्शन के लिए, UIKit Dynamics भौतिकी के साथ 15-20 से अधिक एक साथ ऑब्जेक्ट न रखने की सलाह देता है। प्रत्येक ऑब्जेक्ट को प्रत्येक फ्रेम पर टकराव और बल गणना की आवश्यकता होती है। सीमा से अधिक होने पर, UIView के बजाय CALayer का उपयोग करें — Core Animation लेयर को अधिक कुशलता से संभालता है।
अक्सर पूछे जाने वाले प्रश्न
UIKit Dynamics रिजिड बॉडी सिमुलेशन पर आधारित भौतिक इंटरैक्शन (गुरुत्वाकर्षण, टकराव, बल) का मॉडल बनाता है। Core Animation निर्दिष्ट समय वक्र के साथ CALayer गुणों (position, opacity, transform) को एनिमेट करता है। Dynamics इंटरैक्टिव भौतिकी के लिए उपयुक्त है, Core Animation पूर्वनिर्धारित संक्रमणों के लिए।
SwiftUI में UIKit Dynamics का सीधा समर्थन नहीं है। भौतिक प्रभावों के लिए, UIViewRepresentable के अंदर UIKitView + UIDynamicAnimator का उपयोग करें, या SwiftUI में Animation.spring() और withAnimation() के माध्यम से कस्टम एनिमेशन का उपयोग करें।
animator.removeAllBehaviors() कॉल करें — यह सभी सक्रिय भौतिक व्यवहारों को हटा देता है। जब सभी ऑब्जेक्ट विश्राम में पहुँच जाते हैं तो एनिमेटर स्वचालित रूप से रुक जाता है। अस्थायी ठहराव के लिए, animator.isPaused प्रॉपर्टी का उपयोग करें या अलग-अलग व्यवहार हटाएँ।
Apple पूर्ण भौतिकी (गुरुत्वाकर्षण + टकराव + बल) के साथ 15-20 ऑब्जेक्ट से अधिक न करने की सलाह देता है। सामूहिक एनिमेशन के लिए, UIFieldBehavior का उपयोग करें — यह जोड़ीदार टकराव के बिना केंद्रीय रूप से बलों की गणना करता है, जिससे CPU लोड कम होता है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें