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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الرسوم المتحركة الضمنية مقابل الصريحة
- matchedGeometryEffect للانتقالات البارزة
- AnimatableModifier وAnimatable المخصّصان
- TimelineView وCanvas للرسم عالي الأداء