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) میں nested کیا جا سکتا ہے۔ اس صورت میں، beginTime والدین کے آغاز کے نسبت شمار کیا جاتا ہے، اور duration والدین کی مدت سے محدود ہوتی ہے۔ Speed = 2.0 اینیمیشن کی رفتار کو دوگنا کر دیتا ہے۔

CAAnimationGroup اور CAKeyframeAnimation

CAAnimationGroup متعدد CAAnimation مثالوں کو ایک گروپ میں یکجا کرتا ہے۔ تمام ذیلی اینیمیشنز متوازی طور پر شروع ہوتی ہیں جب تک کہ ہر ایک کے لیے beginTime سیٹ نہ کیا گیا ہو۔ گروپ کا اپنا duration ہوتا ہے، جو ذیلی اینیمیشنز کی زیادہ سے زیادہ مدت کو محدود کرتا ہے۔ گروپ کی timingFunction کو ڈیفالٹ قدر کے طور پر استعمال کیا جاتا ہے اگر ذیلی اینیمیشن اپنی سیٹ نہ کرے۔

CAKeyframeAnimation values کی صف سے متعین متعدد کلیدی فریموں پر ایک خاصیت کو اینیمیٹ کرتی ہے۔ keyTimes پیرامیٹر (0 سے 1 تک NSNumber کی صف) ہر فریم کے لیے وقت کے نشانات متعین کرتا ہے۔ calculationMode انٹرپولیشن متعین کرتا ہے: linear، discrete (کوئی انٹرپولیشن نہیں)، paced (یکساں رفتار)، cubic (spline)، 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 کو متوازی طور پر انجام دیتی ہے۔ path اور calculationMode = .cubicPaced کے ساتھ CAKeyframeAnimation خودکار گردش (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 ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں