UIKit Dynamics — iOS-এ ইন্টারঅ্যাকশনের পদার্থবিদ্যা

লেখক: IT Sectr প্রকাশিত: 2026-03-01 পড়ার সময়: 8 মিনিট

UIKit Dynamics iOS (UIKit)-এ একটি ফিজিক্যাল অ্যানিমেশন ফ্রেমওয়ার্ক যা Views-কে বাস্তব পদার্থবিজ্ঞানের নিয়ম অনুযায়ী ইন্টারঅ্যাক্ট করতে দেয়: মাধ্যাকর্ষণ, সংঘর্ষ, স্থিতিস্থাপকতা এবং আকর্ষণ বল। এই নিবন্ধটি UIDynamicAnimator-এর উপাদান, বিহেভিয়ারের (behavior) ধরন এবং ব্যবহারিক প্রয়োগের পরিস্থিতি ব্যাখ্যা করে।

মূল পয়েন্ট

  • UIDynamicAnimator — ফিজিক্যাল অ্যানিমেশন ইঞ্জিন যা বিহেভিয়ার এবং অবজেক্টকে সংযুক্ত করে
  • UIGravityBehavior — দিক ভেক্টর এবং ত্বরণ মাত্রাসহ মাধ্যাকর্ষণ সিমুলেশন
  • UICollisionBehavior — Views এবং reference view সীমানার মধ্যে সংঘর্ষ পরিচালনা করে
  • UIDynamicItemBehavior — ভৌত বৈশিষ্ট্য কনফিগারেশন: স্থিতিস্থাপকতা, ঘনত্ব, ঘর্ষণ
  • UIAttachmentBehavior — স্প্রিং বা তারের প্রভাবসহ দুটি বিন্দুর মধ্যে সংযোগ

UIKit Dynamics কী?

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 — পদার্থবিদ্যার ইঞ্জিন

UIDynamicAnimator UIKit Dynamics-এর কেন্দ্রীয় ক্লাস। এটি reference view (সাধারণত কন্ট্রোলারের view) দিয়ে আরম্ভ হয় এবং সমস্ত সক্রিয় বিহেভিয়ার পরিচালনা করে। প্রতিটি ফ্রেম UIDynamicAnimator পদার্থবিজ্ঞানের নিয়ম অনুযায়ী সমস্ত যোগ করা উপাদানের অবস্থান, বেগ এবং ত্বরণ পুনঃগণনা করে।

পদ্ধতি addBehavior একটি বিহেভিয়ার (বা জটিল UIDynamicBehavior) যোগ করে, removeBehavior এটি সরিয়ে দেয়। অ্যানিমেটর স্বয়ংক্রিয়ভাবে বিরতি নেয় যখন সমস্ত অবজেক্ট বিশ্রামের অবস্থায় পৌঁছায় (সংঘর্ষ এবং বল ছাড়া চলতে থাকে)। ডেলিগেট পদ্ধতি — UIDynamicAnimatorDelegate — সিমুলেশনের বিরতি এবং পুনরায় শুরুর বিষয়ে জানায়।

UIDynamicItem — অ্যানিমেশনের জন্য প্রোটোকল

পদার্থবিদ্যায় অংশগ্রহণকারী যেকোনো অবজেক্টকে UIDynamicItem প্রোটোকল বাস্তবায়ন করতে হবে। UIView এবং UICollectionViewLayoutAttributes ইতিমধ্যে এটি বাস্তবায়ন করে। প্রোটোকলের বৈশিষ্ট্য প্রয়োজন: bounds, center, transform। যদি অবজেক্ট কাস্টম হয় — প্রোটোকলটি ম্যানুয়ালি বাস্তবায়ন করুন।

Dynamic Behaviors-এর ধরন

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-এ যোগ করা হয়।

Swift কোড উদাহরণ

UIKit Dynamics-এর জন্য Swift কোড একটি UIDynamicAnimator তৈরি করে এবং বিহেভিয়ার যোগ করে। নিচের উদাহরণটি একাধিক অবজেক্ট সহ মাধ্যাকর্ষণ, সংঘর্ষ এবং কাস্টম ভৌত বৈশিষ্ট্য প্রদর্শন করে।

swift
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 থেকে কীভাবে আলাদা?

UIKit Dynamics রিজিড বডি সিমুলেশনের উপর ভিত্তি করে ভৌত মিথস্ক্রিয়া (মাধ্যাকর্ষণ, সংঘর্ষ, বল) মডেল করে। Core Animation নির্দিষ্ট সময় বক্ররেখা বরাবর CALayer বৈশিষ্ট্য (position, opacity, transform) অ্যানিমেট করে। Dynamics ইন্টারেক্টিভ পদার্থবিদ্যার জন্য উপযুক্ত, Core Animation পূর্বনির্ধারিত রূপান্তরের জন্য।

SwiftUI-তে কি UIKit Dynamics ব্যবহার করা যাবে?

SwiftUI-তে UIKit Dynamics-এর সরাসরি সমর্থন নেই। ভৌত প্রভাবের জন্য, UIViewRepresentable-এর ভিতরে UIKitView + UIDynamicAnimator ব্যবহার করুন, অথবা SwiftUI-তে Animation.spring() এবং withAnimation()-এর মাধ্যমে কাস্টম অ্যানিমেশন ব্যবহার করুন।

কীভাবে UIKit Dynamics বন্ধ করবেন?

animator.removeAllBehaviors() কল করুন — এটি সমস্ত সক্রিয় ভৌত বিহেভিয়ার সরিয়ে দেয়। অ্যানিমেটর স্বয়ংক্রিয়ভাবে বিরতি নেয় যখন সমস্ত অবজেক্ট বিশ্রামে পৌঁছায়। অস্থায়ী বিরতির জন্য, animator.isPaused প্রপার্টি ব্যবহার করুন বা পৃথক বিহেভিয়ার সরান।

একসাথে কতগুলি অবজেক্ট অ্যানিমেট করা যাবে?

Apple সম্পূর্ণ পদার্থবিদ্যা (মাধ্যাকর্ষণ + সংঘর্ষ + বল) সহ 15-20 অবজেক্ট-এর বেশি না রাখার সুপারিশ করে। গণ অ্যানিমেশনের জন্য, UIFieldBehavior ব্যবহার করুন — এটি জোড়াভিত্তিক সংঘর্ষ ছাড়াই কেন্দ্রীয়ভাবে বল গণনা করে, যা CPU লোড হ্রাস করে।

সারসংক্ষেপ

  • UIKit Dynamics — মাধ্যাকর্ষণ, সংঘর্ষ এবং বল সিমুলেশনসহ iOS ফিজিক্যাল অ্যানিমেশন ফ্রেমওয়ার্ক
  • UIDynamicAnimator — ইঞ্জিন যা বিহেভিয়ার পরিচালনা করে এবং প্রতিটি ফ্রেমে পদার্থবিদ্যা গণনা করে
  • 7 ধরনের বিহেভিয়ার — UIGravityBehavior, UICollisionBehavior, UIAttachmentBehavior, UISnapBehavior, UIPushBehavior, UIDynamicItemBehavior, UIFieldBehavior
  • সংমিশ্রণ — gravity + collision + itemBehavior বাউন্সসহ বাস্তবসম্মত পতনের পদার্থবিদ্যা তৈরি করে
  • UIDynamicItem — পদার্থবিদ্যায় অংশগ্রহণকারী অবজেক্টের জন্য প্রোটোকল (UIView ডিফল্টরূপে বাস্তবায়ন করে)
  • সীমাবদ্ধতা — সম্পূর্ণ পদার্থবিদ্যা সহ 20টির বেশি অবজেক্ট নয়, গেম এবং জটিল দৃশ্যের জন্য উপযুক্ত নয়
  • SwiftUI — UIKit Dynamics সংহত করতে UIViewRepresentable ব্যবহার করুন

আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব

IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন

আরও পড়ুন