UIKit Dynamics iOS (UIKit) میں فزیکل اینیمیشن کا فریم ورک ہے جو Views کو حقیقی طبیعیات کے قوانین کے مطابق تعامل کرنے دیتا ہے: کشش ثقل، تصادم، لچک اور کشش کی قوتیں۔ یہ مضمون 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 ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں