Timeline — بنیادی باتیں، ایپلیکیشنز میں اینیمیشن وقت کا انتظام

مصنف: IT Sectr اشاعت: 2026-03-02 مطالعے کا وقت: 8 منٹ
Timeline (ٹائم لائن) اینیمیشن کا ایک بنیادی تصور ہے جو یہ طے کرتا ہے کہ اینیمیشن کتنی دیر تک چلتی ہے، اس کے مراحل کس ترتیب میں انجام پاتے ہیں اور وقت کو پیش رفت پر کیسے نقش کیا جاتا ہے۔ موبائل ایپ ڈویلپمنٹ میں، ٹائم لائن کو duration، delay، repeat اور ٹائم سٹیمپ کے ذریعے منظم کیا جاتا ہے۔ iOS میں، اینیمیشن ٹائم لائن CACurrentMediaTime اور CAMediaTiming کے ذریعے نافذ کی جاتی ہے، جبکہ Android میں duration، startDelay اور repeatCount پیرامیٹرز کے ساتھ ValueAnimator اور Animator استعمال ہوتے ہیں۔ Apple Documentation کے مطابق، اینیمیشن سنکرونائزیشن کے لیے درست ٹائم لائن کنٹرول انتہائی اہم ہے: صرف 16 ms (60fps پر ایک فریم) کی ڈی سنکرونائزیشن بھی صارف کو جھٹکے کے طور پر محسوس ہوتی ہے۔ IT Sectr میں، ہم نے Android میں ValueAnimator اور iOS میں CABasicAnimation کے ساتھ CAMediaTiming کے ذریعے ٹائم لائن کے استعمال کو معیاری بنایا ہے — یہ تمام منصوبوں میں یکساں وقت کا انتظام یقینی بناتا ہے۔

اہم نکات

  • Timeline — اینیمیشن وقت کے انتظام کا تصور: duration، delay، repeat، وقت کو پیش رفت پر نقش کرنا۔
  • CAMediaTiming — ٹائم لائن کے انتظام کے لیے iOS Core Animation پروٹوکول: duration، beginTime، repeatCount، speed، timeOffset۔
  • ValueAnimator — duration، startDelay، repeatCount کے ذریعے اینیمیشن ٹائم لائن کے ساتھ کام کرنے کے لیے مرکزی Android کلاس۔
  • CACurrentMediaTime — سیکنڈ میں مطلق وقت حاصل کرنے کے لیے iOS فنکشن، سنکرونائزیشن کے لیے استعمال ہوتا ہے۔
  • TimeInterval — iOS میں ایک ڈیٹا ٹائپ (Double) جو اینیمیشن حسابات کے لیے وقت کے وقفے کی نمائندگی کرتا ہے۔

Timeline کیا ہے؟

Timeline ایک اینیمیشن ٹائم ماڈل ہے جو یہ طے کرتا ہے کہ اینیمیشن کب شروع ہوتی ہے، کتنی دیر چلتی ہے اور وقت کی ترقی اینی میٹڈ پیرامیٹر میں تبدیلیوں میں کیسے تبدیل ہوتی ہے۔ فریم بہ فریم اینیمیشن کے برعکس، جہاں ہر فریم دستی طور پر سیٹ کیا جاتا ہے، ٹائم لائن اینیمیشن کو پیرامیٹرز کے ذریعے بیان کیا جاتا ہے: duration — کل مدت، startDelay — شروع ہونے سے پہلے تاخیر، repeatCount — تکرار کی تعداد، اور timingFunction — رفتار کا منحنی۔

ٹائم لائن نارملائزڈ اسپیس [0, 1] — مقامی وقت یا پیش رفت میں کام کرتی ہے۔ صفر کی قدر اینیمیشن کے شروع ہونے سے مطابقت رکھتی ہے، ایک تکمیل سے۔ ایک ایزنگ فنکشن لکیری مقامی وقت کو حقیقی اینیمیشن پیش رفت میں تبدیل کرتا ہے۔ اگر repeatCount > 1 ہے، تو ٹائم لائن سائیکل (RESTART) یا الٹ (REVERSE) ہو جاتی ہے۔ iOS میں، CAMediaTiming speed (پلے بیک ریٹ، >1 تیز کرتا ہے) اور timeOffset (ٹائم لائن شفٹ) شامل کرتا ہے۔ Android میں، Animator براہ راست ٹائم لائن پوزیشن کنٹرول کے لیے setCurrentPlayTime() استعمال کرتا ہے۔ Material Design کے مطابق، 100 ms سے چھوٹی اینیمیشنز اینیمیشن کے طور پر نہیں سمجھی جاتیں، جبکہ 500 ms سے لمبی اینیمیشنز پریشان کرنے لگتی ہیں۔ انٹرفیس اینیمیشنز کے لیے بہترین مدت 200–350 ms ہے۔

iOS میں Timeline: CAMediaTiming اور CACurrentMediaTime

iOS میں، اینیمیشن ٹائم لائن کا انتظام CAMediaTiming پروٹوکول کے ذریعے کیا جاتا ہے، جو CAAnimation اور CALayer کے ذریعے نافذ کیا گیا ہے۔ یہ خصوصیات فراہم کرتا ہے: duration (سیکنڈ میں)، beginTime (والدین ٹائم لائن کے نسبت شروع ہونے کا وقت)، repeatCount (تکرار کی تعداد)، repeatDuration (کل تکرار کی مدت)، autoreverses (خودکار الٹ)، fillMode (اینیمیشن سے پہلے/بعد میں رویہ)، speed (پلے بیک ریٹ)، اور timeOffset (ٹائم لائن شفٹ)۔

CACurrentMediaTime() ایک فنکشن ہے جو ڈیوائس کے آخری ریبوٹ کے بعد سے سیکنڈ میں مطلق وقت واپس کرتا ہے۔ یہ متعدد اینیمیشنز کو سنکرونائز کرنے کے لیے بنیادی ٹائم سٹیمپ کے طور پر استعمال ہوتا ہے: درست تاخیر کے ساتھ اینیمیشنز کا ایک گروپ شروع کرنے کے لیے beginTime = CACurrentMediaTime() + offset سیٹ کریں۔ CAMediaTiming ٹائم لائن درجہ بندی کو بھی سپورٹ کرتا ہے — ایک والدین پرت speed پراپرٹی کے ذریعے تمام ذیلی اینیمیشنز کو تیز/سست کر سکتی ہے۔ UIKit میں، UIViewPropertyAnimator (iOS 10+) duration، delay خصوصیات اور startAnimation/pauseAnimation/stopAnimation کال بیکس کے ذریعے ٹائم لائن کو خلاصہ کرتا ہے۔ SwiftUI میں، Animation ساخت اینیمیشن تصریح کے حصے کے طور پر duration فراہم کرتی ہے، لیکن براہ راست ٹائم لائن کنٹرول پوشیدہ ہے — حسب ضرورت ٹائم لائن کے لیے حسب ضرورت شیڈیولر کے ساتھ TimelineView (iOS 15+) استعمال کریں۔

Android میں Timeline: Animator اور duration

Android میں، ٹائم لائن کا انتظام Animator کلاس اور اس کے ذیلی طبقات (ValueAnimator، ObjectAnimator) میں مرکزی ہے۔ اہم ٹائم لائن خصوصیات ہیں: duration (ملی سیکنڈ میں)، startDelay (شروع ہونے سے پہلے تاخیر)، repeatCount (تکرار کی تعداد)، repeatMode (RESTART یا REVERSE)۔ setCurrentPlayTime(long) طریقہ ٹائم لائن پر کسی بھی صوابدیدی مقام پر جانے کی اجازت دیتا ہے۔

ValueAnimator ایک تجریدی پرت شامل کرتا ہے: یہ duration کی بنیاد پر 0 سے 1 (نارملائزڈ وقت) تک قدریں پیدا کرتا ہے اور انہیں TimeInterpolator کو بھیجتا ہے۔ AnimatorSet ترتیب وار (playSequentially) یا متوازی (playTogether) عملدرآمد کے ساتھ متعدد Animator کو ایک ہی ٹائم لائن میں یکجا کرنے کی اجازت دیتا ہے۔ Jetpack Compose میں، ٹائم لائن AnimationSpec کے ذریعے منظم کی جاتی ہے: tween (durationMillis، delayMillis، easing)، spring (dampingRatio، stiffness)، اور keyframes (ہر حصے کے لیے حسب ضرورت easing کے ساتھ ٹائم لائن پر پوائنٹس)۔ Compose AnimatedContent transitionSpec کے لیے ٹائم لائن استعمال کرتا ہے — ڈویلپر بیان کرتا ہے کہ مواد وقت کی شفٹوں کے ساتھ کیسے ظاہر/غائب ہوتا ہے۔ Android Performance کے مطابق، 60fps کے لیے اینیمیشن ٹائم لائن 16 ms (vsync سائیکل) کا ضرب ہونی چاہیے — غلط مدت ڈسپلے ریفریش ریٹ سے مماثلت نہ ہونے کی وجہ سے فریم ڈراپ کا سبب بن سکتی ہے۔

وقت میں اینیمیشن کمپوزیشن

متعدد اینیمیشنز کو کمپوز کرتے وقت ٹائم لائن خاص طور پر اہم ہو جاتی ہے۔ تین بنیادی نمونے: جھرن (cascade) — اینیمیشنز آفسیٹ کے ساتھ ترتیب وار شروع ہوتی ہیں (ہر اگلی پچھلی سے آفسیٹ کے بعد شروع ہوتی ہے)، متوازی — تمام اینیمیشنز ایک ہی ٹائم لائن کے ساتھ بیک وقت شروع ہوتی ہیں، اور سٹیگر — اینیمیشنز اوورلیپ کے ساتھ شروع ہوتی ہیں (دوسری پہلی کے مکمل ہونے سے پہلے شروع ہوتی ہے)۔

iOS میں، جھرن ہر CAAnimation کے beginTime = پچھلا beginTime + پچھلا duration کے ذریعے نافذ کیا جاتا ہے۔ سٹیگر کے لیے،嵌套 اینیمیشنز میں مختلف beginTime اقدار کے ساتھ CAAnimationGroup استعمال کیا جاتا ہے۔ Android میں، AnimatorSet playSequentially اور playTogether کو سپورٹ کرتا ہے؛ ہر Animator کے لیے startDelay سیٹ کرکے سٹیگر بنایا جاتا ہے۔ Compose میں، AnimatedVisibility enter/exitTransition کے ساتھ فہرست آئٹمز کے جھرن نما ظہور کے لیے staggerChildren ویرینٹ میں سٹیگر استعمال کرتا ہے۔ WWDC اور Google I/O 2024 میں، دونوں پلیٹ فارمز نے ٹائم لائن ویژولائزیشن ٹولز متعارف کرائے: Xcode Animations Inspector اور Android Studio Animations Timeline — یہ حقیقی وقت میں اصل ٹائم لائن اور گرائے گئے فریم دکھاتے ہیں۔

کوڈ کی مثالیں

iOS: CAMediaTiming کے ساتھ CABasicAnimation

حسب ضرورت ٹائم لائن کے ساتھ اینیمیشن کی ایک مثال: 0.3 سیکنڈ تاخیر، 0.6 سیکنڈ مدت، خودکار الٹ اور لامحدود تکرار۔ CAMediaTiming تمام وقت کے پیرامیٹرز کو کنٹرول کرتا ہے۔

swift
import UIKit

func breathingAnimation(layer: CALayer) {
    let animation = CABasicAnimation(keyPath: "opacity")
    animation.duration = 0.6
    animation.beginTime = CACurrentMediaTime() + 0.3
    animation.fromValue = 1.0
    animation.toValue = 0.3
    animation.autoreverses = true
    animation.repeatCount = .infinity
    animation.speed = 1.0
    animation.fillMode = .both

    layer.add(animation, forKey: "breathing")
}

beginTime = CACurrentMediaTime() + 0.3 300 ms کی تاخیر فراہم کرتا ہے۔ autoreverses = true ہر چکر کے بعد اینیمیشن کو الٹی سمت میں چلاتا ہے۔ repeatCount = .infinity “سانس” اثر کا لامحدود لوپ بناتا ہے۔ speed = 1.0 — عام رفتار؛ 2.0 کی قدر سے اینیمیشن کو 2x تیز کریں۔

iOS: حسب ضرورت ٹائم لائن کے لیے TimelineView

SwiftUI TimelineView (iOS 15+) حسب ضرورت اینیمیشن کے لیے سسٹم ٹائم لائن تک رسائی فراہم کرتا ہے۔ ویو ہر شیڈیولر ٹک پر اپ ڈیٹ ہوتا ہے۔

swift
import SwiftUI

struct TimelineViewExample: View {
    var body: some View {
        TimelineView(.periodic(from: .now, by: 0.1)) { context in
            let seconds = context.date.timeIntervalSinceReferenceDate
            let phase = sin(seconds * 2 * .pi)

            Circle()
                .fill(Color.blue)
                .frame(width: 60 + 30 * phase)
                .animation(.linear(duration: 0), value: phase)
        }
    }
}

TimelineView .periodic شیڈیولر کے ساتھ ہر 0.1 سیکنڈ میں ٹک پیدا کرتا ہے۔ بندش میں، context.date موجودہ وقت ہے، جو سائن ویو مرحلے میں تبدیل ہو جاتا ہے۔ دائرے کا سائز 1 Hz فریکوئنسی پر دھڑکتا ہے۔ TimelineView، Animation API کے بغیر SwiftUI میں اپنی ٹائم لائن کے ساتھ اینیمیشن بنانے کا واحد طریقہ ہے۔

Android: حسب ضرورت ٹائم لائن کے ساتھ ValueAnimator

مکمل ٹائم لائن کنٹرول کے ساتھ ValueAnimator: تاخیر، مدت، تکرار۔ setCurrentPlayTime طریقہ ٹائم لائن کے ساتھ چھلانگ لگانے کی اجازت دیتا ہے۔

kotlin
import android.animation.ValueAnimator
import android.view.animation.AccelerateDecelerateInterpolator
import android.view.View

fun View.timelineAnimation() {
    ValueAnimator.ofFloat(0f, 1f).apply {
        duration = 400
        startDelay = 200
        repeatCount = 2
        repeatMode = ValueAnimator.REVERSE
        interpolator = AccelerateDecelerateInterpolator()

        addUpdateListener { animator ->
            val progress = animator.animatedFraction
            alpha = progress
            translationX = progress * 100f
        }

        start()
    }
}

startDelay = 200 ms — شروع ہونے سے پہلے تاخیر۔ repeatMode = REVERSE اینیمیشن کو ابتدائی قدر پر واپس لاتا ہے۔ animatedFraction repeatMode کو مدنظر رکھتے ہوئے 0 سے 1 تک پیش رفت دیتا ہے۔ addUpdateListener ہر فریم (عام طور پر 16 ms) پر فائر ہوتا ہے۔ روکنے کے لیے pause() / resume() استعمال کریں۔

Android: ٹائم لائن کمپوزیشن کے لیے AnimatorSet

AnimatorSet متعدد اینیمیشنز سے پیچیدہ ٹائم لائنز بنانے کی اجازت دیتا ہے۔ مثال اوورلیپ (سٹیگر) کے ساتھ ترتیب وار عملدرآمد کو ظاہر کرتی ہے۔

kotlin
import android.animation.AnimatorSet
import android.animation.ObjectAnimator
import android.view.View

fun View.staggerAnimation() {
    val fadeIn = ObjectAnimator.ofFloat(this, "alpha", 0f, 1f).apply {
        duration = 300
    }
    val slideUp = ObjectAnimator.ofFloat(this, "translationY", 100f, 0f).apply {
        duration = 400
        startDelay = 100
    }
    val scale = ObjectAnimator.ofFloat(this, "scaleX", 0.8f, 1f).apply {
        duration = 250
        startDelay = 200
    }

    AnimatorSet().apply {
        playTogether(fadeIn, slideUp, scale)
        start()
    }
}

playTogether تمام اینیمیشنز کو متوازی طور پر شروع کرتا ہے، لیکن ہر ایک کا اپنا startDelay ہوتا ہے — یہ سٹیگر اثر پیدا کرتا ہے: fadeIn پہلے شروع ہوتا ہے (0 ms)، slideUp 100 ms بعد، scale 200 ms بعد۔ نتیجے میں ٹائم لائن: 0 — 100 — 200 — 600 ms۔ ترتیب وار عملدرآمد کے لیے، playSequentially استعمال کریں۔

اکثر پوچھے گئے سوالات

Android میں Animator، ValueAnimator سے کیسے مختلف ہے؟

Animator تمام اینیمیشنز کے لیے ایک تجریدی بنیادی کلاس ہے۔ ValueAnimator اس کا ذیلی طبقہ ہے جو کسی شے سے منسلک ہوئے بغیر عددی اقدار کو اینی میٹ کرتا ہے۔ ObjectAnimator (ValueAnimator کا ذیلی طبقہ) کسی شے کی مخصوص خصوصیت (مثلاً alpha یا translationY) کو اینی میٹ کرتا ہے۔ ٹائم لائن کے لیے، addUpdateListener کے ذریعے کال بیک کے ساتھ ValueAnimator کو یونیورسل ٹائمر کے طور پر استعمال کریں۔

مختلف آلات پر اینیمیشنز کو کیسے سنکرونائز کریں؟

فریموں کی تعداد کے بجائے پیش رفت کا حساب لگانے کے لیے سسٹم گھڑیاں (iOS میں CACurrentMediaTime، Android میں System.nanoTime) استعمال کریں۔ نیٹ ورک سنکرونائزیشن کے لیے، آفسیٹ تصحیح کے ساتھ NTP پر مبنی ٹائمر استعمال کریں۔ iOS ملی سیکنڈ درستگی کے ساتھ آڈیو ویڈیو ٹائم لائن سنکرونائزیشن کے لیے AVAudioSession کو سپورٹ کرتا ہے۔ فریم پر مبنی سنکرونائزیشن سے بچیں — فریم ریٹ 30 سے 120 fps تک مختلف ہوتے ہیں۔

Animator میں startOffset اور repeatCount کیا ہیں؟

startOffset ملی سیکنڈ میں اینیمیشن شروع ہونے سے پہلے کی تاخیر ہے۔ جھرن اور سٹیگر اثرات کے لیے استعمال ہوتا ہے۔ repeatCount تکرار کی تعداد ہے: 0 = کوئی تکرار نہیں، ValueAnimator.INFINITE = لامحدود لوپ۔ repeatMode سمت کا تعین کرتا ہے: RESTART (شروع پر دوبارہ سیٹ) یا REVERSE (الٹی سمت)۔ iOS میں، startOffset کو beginTime کہا جاتا ہے (CACurrentMediaTime کے ساتھ مجموعہ میں)، repeatCount CABasicAnimation کی ایک ہی خصوصیت ہے۔

اینیمیشن کی بہترین مدت کیا ہے؟

Material Design انٹرفیس اینیمیشنز کے لیے 200–350 ms تجویز کرتا ہے۔ 100 ms سے چھوٹی اینیمیشنز اینیمیشن کے طور پر نہیں سمجھی جاتیں، جبکہ 500 ms سے لمبی اینیمیشنز پریشان کن ہوتی ہیں۔ عناصر کے داخلے/خروج کے لیے: 200–300 ms۔ اسکرینوں کے درمیان ٹرانزیشن کے لیے: 300–400 ms۔ چھوٹے عناصر کے لیے چھوٹی مدت (100–200 ms) اور بڑے عناصر کے لیے لمبی مدت (400–500 ms) استعمال کریں۔

پلے بیک کے دوران اینیمیشن کیوں جھٹکے دیتی ہے؟

جھٹکا (jank) ان وجوہات کی بنا پر ہوتا ہے: مرکزی تھریڈ میں طویل المدتی آپریشنز (رینڈرنگ کو مسدود کرتے ہیں)، اوور ڈرا کے ساتھ پیچیدہ View/Layer درجہ بندی، یا غلط ٹائم لائن استعمال (مدت vsync کا ضرب نہیں — 60fps کے لیے 16ms، 120fps کے لیے 8ms)۔ گرائے گئے فریموں کا پتہ لگانے کے لیے Xcode Instruments Animations یا Android Studio Profiler استعمال کریں۔ Compose میں، پیچیدہ ڈرائنگ کو کیش کرنے کے لیے Modifier.drawWithCache استعمال کریں۔

خلاصہ

  • Timeline ایک اینیمیشن ٹائم ماڈل ہے جس میں duration، startDelay، repeatCount، repeatMode پیرامیٹرز ہیں جو اینیمیشن کے بہاؤ کی وضاحت کرتے ہیں۔
  • iOS CAMediaTiming پروٹوکول duration، beginTime، speed، timeOffset، repeatCount، fillMode کے ذریعے ٹائم لائن کا انتظام کرتا ہے۔
  • Android Animator اور ValueAnimator براہ راست کنٹرول کے لیے duration، startDelay، repeatCount، repeatMode اور setCurrentPlayTime فراہم کرتے ہیں۔
  • Android میں AnimatorSet اور iOS میں CAAnimationGroup اینیمیشنز کو ایک ہی ٹائم لائن میں یکجا کرنے کی اجازت دیتے ہیں۔
  • SwiftUI میں TimelineView (iOS 15+) Animation API کے بغیر حسب ضرورت ٹائم لائنز کے لیے سسٹم شیڈیولر تک رسائی فراہم کرتا ہے۔
  • iOS میں CACurrentMediaTime() اور Android میں System.nanoTime اینیمیشن سنکرونائزیشن کے لیے بنیادی ٹائم سٹیمپ ہیں۔
  • Material Design اور HIG سفارشات کے مطابق انٹرفیس اینیمیشنز کے لیے بہترین مدت 200-350 ms ہے۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

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

مزید پڑھیں