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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন