0Pricing
Swift Academy · درس

‏TimelineView وCanvas للرسم عالي الأداء

اعرضوا رسومًا متحركة آنية باستخدام جداول TimelineView وواجهة Canvas البرمجية.

‏TimelineView وCanvas للرسم عالي الأداء درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.

نظرة عامة على TimelineView

يعيد TimelineView رسم محتواه وفق جدول زمني، ما يتيح إنشاء حركات آنية دون مؤقتات.

TimelineView(.animation) { timeline in
  Text(timeline.date.formatted(date: .omitted, time: .standard))
}

أنواع TimelineSchedule

الجداول المضمّنة هي: .animation (في كل إطار)، و.periodic (بفاصل زمني ثابت)، و.explicit (في تواريخ محددة).

TimelineView(.periodic(from: .now, by: 1.0)) { context in
  ClockFace(date: context.date)
}

نظرة عامة على Canvas

يوفر Canvas سياق رسم ثنائي الأبعاد للرسومات عالية الأداء بنمط الرسم الفوري، على نحو مشابه لـ Core Graphics.

Canvas { ctx, size in
  ctx.fill(
    Path(ellipseIn: CGRect(origin: .zero, size: size)),
    with: .color(.blue)
  )
}

رسم الأشكال في Canvas

استخدم أساليب GraphicsContext مثل fill وstroke وdraw لعرض المسارات والصور.

Canvas { ctx, size in
  var path = Path()
  path.move(to: .zero)
  path.addLine(to: CGPoint(x: size.width, y: size.height))
  ctx.stroke(path, with: .color(.red), lineWidth: 2)
}

دمج TimelineView وCanvas

ضع Canvas داخل TimelineView لإنشاء حركة إطارًا بإطار دون تحديثات لحالة SwiftUI.

TimelineView(.animation) { timeline in
  Canvas { ctx, size in
    let t = timeline.date.timeIntervalSinceReferenceDate
    let x = size.width * (0.5 + 0.4 * cos(t))
    let y = size.height * (0.5 + 0.4 * sin(t))
    ctx.fill(Path(ellipseIn: CGRect(x: x-10, y: y-10, width: 20, height: 20)), with: .color(.orange))
  }
}

حل الرموز

استدعِ ctx.resolve() لتحويل عروض SwiftUI، مثل Image، إلى رموز قابلة للرسم في Canvas.

Canvas { ctx, size in
  let symbol = ctx.resolveSymbol(id: "star")!
  ctx.draw(symbol, at: CGPoint(x: 50, y: 50))
} symbols: {
  Image(systemName: "star.fill").tag("star")
}

النصوص والسلاسل المنسّقة في Canvas

ارسم النص باستخدام ctx.draw(Text(...), at:) لعرض تسميات مخصصة داخل Canvas.

Canvas { ctx, size in
  ctx.draw(
    Text("Score: 100").font(.title).foregroundStyle(.white),
    at: CGPoint(x: size.width/2, y: 30)
  )
}

التحويلات والقص

طبّق التحويلات الأفينية ومسارات القص على سياق الرسومات لإنشاء تأثيرات معقدة.

Canvas { ctx, size in
  ctx.translateBy(x: size.width/2, y: size.height/2)
  ctx.rotate(by: .degrees(45))
  ctx.fill(Path(CGRect(x: -50, y: -50, width: 100, height: 100)), with: .color(.purple))
}

الأداء مقارنة بعروض SwiftUI

يعرض Canvas جميع الرسومات في مرحلة رسم واحدة، ما يجعله مناسبًا لأنظمة الجسيمات أو المخططات المعقدة التي سيكون فيها استخدام آلاف العروض بطيئًا جدًا.

// Benchmark: 500 moving dots
// Canvas: ~120fps on iPhone
// SwiftUI views: ~30fps due to view tree overhead

إمكانية الوصول في Canvas

لا يمكن لـ VoiceOver الوصول إلى محتوى Canvas. أضف تسميات لإمكانية الوصول باستخدام المعدِّل accessibilityChildren.

Canvas { ctx, size in
  // draw chart bars
}
.accessibilityChildren {
  ForEach(bars) { Text("\($0.label): \($0.value)") }
}

وتيرة TimelineView

يوفر السياق تلميحًا باسم cadence (مباشر أو بالثواني أو بالدقائق)، ما يتيح لك تقليل التفاصيل عندما يكون النظام تحت ضغط.

TimelineView(.animation) { ctx in
  if ctx.cadence == .live {
    HighDetailAnimation(date: ctx.date)
  } else {
    LowDetailAnimation(date: ctx.date)
  }
}

فحص سريع

أي TimelineSchedule يجعل TimelineView يعيد الرسم في كل إطار من إطارات الحركة؟

مراجعة الدرس

يعيد TimelineView الرسم وفق جدول زمني، إطارًا بإطار عند استخدام .animation. ويوفر Canvas سياق رسم ثنائي الأبعاد بنمط الرسم الفوري. ادمجهما لإنشاء تأثيرات جسيمات وألعاب ومخططات مباشرة عالية الأداء دون الحمل الناتج عن مقارنة عروض SwiftUI في كل إطار.

الأسئلة الشائعة

هل درس «‏TimelineView وCanvas للرسم عالي الأداء» مجاني؟

نعم — نص درس «‏TimelineView وCanvas للرسم عالي الأداء» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.

ماذا ستتعلم في «‏TimelineView وCanvas للرسم عالي الأداء»؟

اعرضوا رسومًا متحركة آنية باستخدام جداول TimelineView وواجهة Canvas البرمجية. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟

لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «‏TimelineView وCanvas للرسم عالي الأداء»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟

نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. الرسوم المتحركة الضمنية مقابل الصريحة
  2. ‏matchedGeometryEffect للانتقالات البارزة
  3. ‏AnimatableModifier وAnimatable المخصّصان
  4. ‏TimelineView وCanvas للرسم عالي الأداء
← العودة إلى Swift Academy