CAAnimation — মূল ধারণা, CAAnimationGroup এবং লেয়ার অ্যানিমেশন

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

CAAnimation হল Core Animation-এর একটি অ্যাবস্ট্র্যাক্ট বেস ক্লাস যা সকল ধরনের অ্যানিমেশনের জন্য সাধারণ ইন্টারফেস নির্ধারণ করে: CABasicAnimation, CAKeyframeAnimation, CAAnimationGroup, CATransition। নিবন্ধটি ক্লাস হায়ারার্কি, মূল বৈশিষ্ট্য, অ্যানিমেশন গ্রুপিং এবং Swift-এ ব্যবহারিক উদাহরণ ব্যাখ্যা করে।

মূল পয়েন্ট

  • CAAnimation — Core Animation-এর অ্যাবস্ট্র্যাক্ট বেস ক্লাস, যেখান থেকে CABasicAnimation, CAKeyframeAnimation, CAAnimationGroup, CATransition উত্তরাধিকার সূত্রে প্রাপ্ত
  • CAAnimationGroup — শেয়ার্ড duration এবং timingFunction সহ একাধিক অ্যানিমেশনের সমান্তরাল নির্বাহ
  • CAKeyframeAnimation — মান এবং সময় টিকিটের অ্যারে সহ কীফ্রেম অ্যানিমেশন
  • CAMediaTiming — সময় ব্যবস্থাপনা প্রোটোকল: duration, repeatCount, autoreverses, timeOffset
  • CATransition — লেয়ার অবস্থার মধ্যে পূর্বনির্ধারিত ট্রানজিশন (fade, push, moveIn, reveal)

CAAnimation কী?

CAAnimation হল Core Animation-এর একটি অ্যাবস্ট্র্যাক্ট ক্লাস যা সকল অ্যানিমেশনের জন্য সাধারণ ইন্টারফেস নির্ধারণ করে। এটি CAMediaTiming প্রোটোকল (সময়কাল, পুনরাবৃত্তি, অটোরিভার্স) এবং CAMediaTimingFillMode (অ্যানিমেশনের আগে/পরে আচরণ) বাস্তবায়ন করে। CAAnimation সরাসরি ইনস্ট্যানশিয়েট করা যায় না — এর উপশ্রেণীগুলির একটি ব্যবহার করুন: CABasicAnimation, CAKeyframeAnimation, CAAnimationGroup, CATransition বা CAAnimation (animationForKeyPath-এর মাধ্যমে)।

প্রতিটি CAAnimation add(_:forKey:) পদ্ধতির মাধ্যমে CALayer-এ যোগ করা হয়। forKey প্যারামিটারটি লেয়ারে অ্যানিমেশনের একটি অনন্য শনাক্তকারী। একটি keyPath-এ শুধুমাত্র একটি সক্রিয় অ্যানিমেশন থাকতে পারে। একটি অ্যানিমেশন প্রতিস্থাপন করতে, নতুন যোগ করার আগে removeAnimation(forKey:) ব্যবহার করুন।

Apple-এর মতে, CAAnimation হল লেয়ারের একটি "অস্থায়ী" পরিবর্তন। অ্যানিমেশন সম্পূর্ণ হওয়ার পর, উপস্থাপনা লেয়ার মডেল লেয়ারের মানগুলিতে ফিরে আসে যদি fillMode এবং isRemovedOnCompletion সেট না করা থাকে।

CAAnimation ক্লাস হায়ারার্কি

Core Animation চারটি প্রধান CAAnimation উপশ্রেণী প্রদান করে, প্রতিটি তার নিজস্ব অ্যানিমেশন পরিস্থিতির জন্য। হায়ারার্কি বুঝতে পারলে কাজের জন্য সঠিক ধরন নির্বাচন করতে সাহায্য করে।

ক্লাসউদ্দেশ্যমূল বৈশিষ্ট্য
CABasicAnimationএকটি বৈশিষ্ট্যকে A থেকে B পর্যন্ত অ্যানিমেট করেfromValue, toValue, byValue, keyPath
CAKeyframeAnimationএকাধিক কীফ্রেম জুড়ে অ্যানিমেশনvalues, keyTimes, path, calculationMode
CAAnimationGroupএকাধিক অ্যানিমেশন গ্রুপ করেanimations অ্যারে, একক duration
CATransitionলেয়ার অবস্থার মধ্যে ট্রানজিশনtype (fade/push/moveIn/reveal), subtype, startProgress

CABasicAnimation হল সবচেয়ে সহজ এবং জনপ্রিয় উপশ্রেণী। CAKeyframeAnimation জটিল ট্রাজেক্টরির জন্য ব্যবহৃত হয় (যেমন, Bezier বক্ররেখা বরাবর গতি)। CAAnimationGroup একাধিক অ্যানিমেশন সমান্তরালে চালায়। CATransition হল ছবি বা কন্টেন্ট অবস্থার মধ্যে একটি প্রস্তুত ট্রানজিশন।

CAMediaTiming — সময় ব্যবস্থাপনা

CAMediaTiming প্রোটোকল CAAnimation-এর একটি মৌলিক অংশ। এটি মৌলিক সময়ের বৈশিষ্ট্যগুলি নির্ধারণ করে: duration, repeatCount, repeatDuration, autoreverses, beginTime (পিতামাতার সাপেক্ষে শুরু সময়), timeOffset (একটি চক্রের মধ্যে অফসেট), speed (প্লেব্যাক হার)।

fillMode বৈশিষ্ট্য (CAMediaTimingFillMode) অ্যানিমেশনের আগে (backwards) এবং পরে (forwards) লেয়ার প্রদর্শন নির্ধারণ করে। মান: removed (ডিফল্ট — মডেল লেয়ারে ফিরে যায়), forwards (চূড়ান্ত অবস্থায় থাকে), backwards (শুরুর আগে প্রাথমিক অবস্থা দেখায়), both (উভয় আচরণ একত্রিত করে)। fillMode শুধুমাত্র তখন কাজ করে যখন isRemovedOnCompletion = false।

CAAnimation CAMediaTiming থেকে উত্তরাধিকার সূত্রে প্রাপ্ত এবং এটি একটি পিতামাতা অ্যানিমেশনে (CAAnimationGroup) নেস্ট করা যেতে পারে। এই ক্ষেত্রে, beginTime পিতামাতার শুরুর সাপেক্ষে গণনা করা হয়, এবং duration পিতামাতার সময়কাল দ্বারা সীমিত হয়। Speed = 2.0 অ্যানিমেশনের গতি দ্বিগুণ করে।

CAAnimationGroup এবং CAKeyframeAnimation

CAAnimationGroup একাধিক CAAnimation ইনস্ট্যান্সকে একটি গ্রুপে একত্রিত করে। সমস্ত চাইল্ড অ্যানিমেশন সমান্তরালে শুরু হয় যদি না প্রতিটির জন্য beginTime সেট করা থাকে। গ্রুপের নিজস্ব duration থাকে, যা চাইল্ড অ্যানিমেশনের সর্বোচ্চ সময়কাল সীমিত করে। গ্রুপের timingFunction ডিফল্ট মান হিসেবে ব্যবহৃত হয় যদি চাইল্ড অ্যানিমেশন নিজস্ব সেট না করে।

CAKeyframeAnimation একটি বৈশিষ্ট্যকে একাধিক কীফ্রেম জুড়ে অ্যানিমেট করে, যা values-এর অ্যারে দ্বারা নির্ধারিত হয়। keyTimes প্যারামিটার (0 থেকে 1 পর্যন্ত NSNumber-এর অ্যারে) প্রতিটি ফ্রেমের জন্য সময় টিকিট নির্ধারণ করে। calculationMode ইন্টারপোলেশন নির্দিষ্ট করে: linear, discrete (কোনো ইন্টারপোলেশন নেই), paced (অভিন্ন গতি), cubic (স্প্লাইন), cubicPaced।

swift
import QuartzCore

// CAAnimationGroup — অ্যানিমেশন সংমিশ্রণ
func complexLayerAnimation(_ layer: CALayer) {
    let fade = CABasicAnimation(keyPath: "opacity")
    fade.fromValue = 1.0
    fade.toValue = 0.3

    let scale = CABasicAnimation(keyPath: "transform.scale")
    scale.fromValue = 1.0
    scale.toValue = 1.5

    let rotate = CABasicAnimation(keyPath: "transform.rotation.z")
    rotate.fromValue = 0
    rotate.toValue = Double.pi * 2

    let group = CAAnimationGroup()
    group.animations = [fade, scale, rotate]
    group.duration = 2.0
    group.repeatCount = .infinity
    group.autoreverses = true

    layer.add(group, forKey: "pulse")
}

// CAKeyframeAnimation — ট্রাজেক্টরি গতি
func animateAlongPath(_ layer: CALayer) {
    let path = UIBezierPath()
    path.move(to: CGPoint(x: 0, y: 0))
    path.addCurve(
        to: CGPoint(x: 200, y: 300),
        controlPoint1: CGPoint(x: 100, y: 0),
        controlPoint2: CGPoint(x: 100, y: 300)
    )

    let anim = CAKeyframeAnimation(keyPath: "position")
    anim.path = path.cgPath
    anim.duration = 1.5
    anim.calculationMode = .cubicPaced
    anim.rotationMode = .auto
    anim.fillMode = .forwards
    anim.isRemovedOnCompletion = false

    layer.add(anim, forKey: "pathAnim")
    layer.position = CGPoint(x: 200, y: 300)
}

// CAKeyframeAnimation কাস্টম মান সহ
func bounceAnimation(_ layer: CALayer) {
    let bounce = CAKeyframeAnimation(keyPath: "position.y")
    bounce.values = [0, -50, 0, -25, 0, -10, 0]
    bounce.keyTimes = [0, 0.15, 0.3, 0.45, 0.6, 0.8, 1.0]
    bounce.duration = 0.8
    bounce.timingFunction = CAMediaTimingFunction(name: .easeOut)
    bounce.isAdditive = true // বর্তমান অবস্থানের সাপেক্ষে
    layer.add(bounce, forKey: nil)
}

CAAnimationGroup 2.0 সময়কালের সাথে fade, scale এবং rotate সমান্তরালে নির্বাহ করে। CAKeyframeAnimation path এবং calculationMode = .cubicPaced সহ স্বয়ংক্রিয় ঘূর্ণন (rotationMode = .auto) সহ Bezier বক্ররেখা বরাবর অভিন্ন গতি প্রদান করে। bounceAnimation আপেক্ষিক অফসেটের জন্য isAdditive ব্যবহার করে।

Swift কোড উদাহরণ

কন্টেন্ট সুইচিংয়ের জন্য CATransition এবং পালস ইফেক্টের জন্য CAAnimationGroup ব্যবহার করে জটিল লেয়ার অ্যানিমেশনের একটি সম্পূর্ণ CAAnimation উদাহরণ।

swift
import UIKit
import QuartzCore

class AnimationDemoView: UIView {

    private let demoLayer = CALayer()
    private var currentColor: CGColor = UIColor.systemBlue.cgColor

    override func layoutSubviews() {
        super.layoutSubviews()
        demoLayer.frame = CGRect(x: bounds.midX - 40, y: bounds.midY - 40,
                                 width: 80, height: 80)
        demoLayer.backgroundColor = currentColor
        demoLayer.cornerRadius = 12
        layer.addSublayer(demoLayer)
    }

    func animateTransition() {
        // CATransition — অবস্থার মধ্যে ট্রানজিশন
        let transition = CATransition()
        transition.type = .fade
        transition.duration = 0.5
        transition.timingFunction = CAMediaTimingFunction(name: .easeInEaseOut)
        demoLayer.add(transition, forKey: nil)

        // লেনদেনের মাধ্যমে কন্টেন্ট পরিবর্তন
        currentColor = currentColor == UIColor.systemBlue.cgColor
            ? UIColor.systemRed.cgColor
            : UIColor.systemBlue.cgColor
        demoLayer.backgroundColor = currentColor
    }

    func startPulse() {
        let scaleUp = CABasicAnimation(keyPath: "transform.scale")
        scaleUp.fromValue = 1.0
        scaleUp.toValue = 1.3

        let fadeOut = CABasicAnimation(keyPath: "opacity")
        fadeOut.fromValue = 1.0
        fadeOut.toValue = 0.6

        let glow = CABasicAnimation(keyPath: "shadowOpacity")
        glow.fromValue = 0.0
        glow.toValue = 0.8

        let group = CAAnimationGroup()
        group.animations = [scaleUp, fadeOut, glow]
        group.duration = 1.2
        group.autoreverses = true
        group.repeatCount = .infinity
        group.timingFunction = CAMediaTimingFunction(name: .easeInEaseOut)

        demoLayer.add(group, forKey: "pulse")
    }

    func stopAnimations() {
        demoLayer.removeAllAnimations()
        demoLayer.transform = CATransform3DIdentity
        demoLayer.opacity = 1.0
        demoLayer.shadowOpacity = 0.0
    }
}

type: .fade সহ CATransition দুটি backgroundColor অবস্থার মধ্যে একটি মসৃণ ট্রানজিশন তৈরি করে। CAAnimationGroup পালস ইফেক্টের জন্য scale, opacity এবং shadowOpacity একত্রিত করে। removeAllAnimations() সমস্ত অ্যানিমেশন বাতিল করে এবং লেয়ারকে তার মূল মডেল লেয়ার মানগুলিতে ফিরিয়ে আনে।

সচরাচর জিজ্ঞাসিত প্রশ্ন

CABasicAnimation এবং CAKeyframeAnimation-এর মধ্যে পার্থক্য কী?

CABasicAnimation একটি বৈশিষ্ট্যকে প্রাথমিক (fromValue) থেকে চূড়ান্ত (toValue) মান পর্যন্ত অভিন্ন ইন্টারপোলেশন সহ অ্যানিমেট করে। CAKeyframeAnimation আপনাকে অ-রৈখিক কীফ্রেম অ্যানিমেশনের জন্য মধ্যবর্তী মান (values) এবং সময় টিকিটের (keyTimes) একটি অ্যারে নির্দিষ্ট করার অনুমতি দেয়, যার মধ্যে path-এর মাধ্যমে বক্র-ভিত্তিক গতি অন্তর্ভুক্ত।

কখন CAAnimationGroup ব্যবহার করবেন?

CAAnimationGroup প্রয়োজন যখন একাধিক অ্যানিমেশনকে গ্যারান্টিড সিঙ্ক্রোনাইজেশন সহ সমান্তরালে চলতে হবে: গ্রুপের সময়কাল সমস্ত চাইল্ড অ্যানিমেশনকে সীমিত করে। সম্মিলিত ইফেক্টের জন্য group ব্যবহার করুন: একসাথে স্কেলিং + অস্বচ্ছতা পরিবর্তন + ঘূর্ণন।

CAAnimation-এ fillMode কী?

fillMode অ্যানিমেশনের আগে (backwards) এবং পরে (forwards) লেয়ার প্রদর্শন নির্ধারণ করে। মান .forwards অ্যানিমেশন সম্পূর্ণ হওয়ার পর লেয়ারকে চূড়ান্ত অবস্থায় রাখে (isRemovedOnCompletion = false প্রয়োজন)। .both backwards (শুরুর আগে প্রাথমিক অবস্থা) এবং forwards একত্রিত করে।

CAAnimation কীভাবে CALayer অ্যানিমেশন থেকে আলাদা?

CAAnimation হল একটি অ্যানিমেশন অবজেক্ট (নির্দেশ) যা layer.add(animation, forKey:) এর মাধ্যমে CALayer-এ যোগ করা হয়। অ্যানিমেশন একটি পৃথক অবজেক্ট হিসেবে বিদ্যমান, পুনরায় ব্যবহার করা যেতে পারে (কপি করে) এবং CAMediaTiming-এর মাধ্যমে পরিচালিত হয়। একটি লেয়ারে বিভিন্ন কী সহ একাধিক অ্যানিমেশন থাকতে পারে।

সারসংক্ষেপ

  • CAAnimation — Core Animation-এর অ্যাবস্ট্র্যাক্ট বেস ক্লাস যা CAMediaTiming এবং CAMediaTimingFillMode বাস্তবায়ন করে
  • ক্লাস হায়ারার্কি — CABasicAnimation (একটি বৈশিষ্ট্য), CAKeyframeAnimation (একাধিক ফ্রেম), CAAnimationGroup (গ্রুপিং), CATransition (ট্রানজিশন)
  • CAMediaTiming — duration, repeatCount, autoreverses, beginTime, timeOffset, speed, fillMode সহ প্রোটোকল
  • CAAnimationGroup — একক duration এবং timingFunction সহ সমান্তরাল অ্যানিমেশন নির্বাহ
  • CAKeyframeAnimation — calculationMode সহ values/keyTimes বা path (Bezier বক্ররেখা) এর মাধ্যমে অ্যানিমেশন
  • CATransition — পূর্বনির্ধারিত ধরন: fade, push, moveIn, reveal subtype কনফিগারেশন সহ
  • ব্যবস্থাপনা — layer.add(animation, forKey:), removeAnimation(forKey:), removeAllAnimations()

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

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

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

আরও পড়ুন