Swift Academy · درس

‏matchedGeometryEffect للانتقالات البارزة

أنشئوا رسومًا متحركة سلسة بين العروض باستخدام namespace ومعرّفات matched.

الدرس 2 من 413 خطوة

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

ما هو matchedGeometryEffect؟

يحرّك matchedGeometryEffect موضع العرض وحجمه بين حالتين، ما ينشئ انتقالًا من نوع hero.

struct HeroDemo: View {
  @Namespace private var ns
  @State private var expanded = false
  var body: some View {
    if expanded {
      BigCard().matchedGeometryEffect(id: "card", in: ns)
    } else {
      SmallCard().matchedGeometryEffect(id: "card", in: ns)
    }
  }
}

إنشاء مساحة أسماء

أعلن عن @Namespace في العرض الأب. وتشترك جميع العروض المتطابقة في مساحة الأسماء هذه.

struct ParentView: View {
  @Namespace private var heroNamespace
}

تطبيق المعدِّل

طبّق .matchedGeometryEffect(id:in:) باستخدام القيمة نفسها لـ id على عرض المصدر وعرض الوجهة.

Image("cover")
  .matchedGeometryEffect(id: "albumArt", in: heroNamespace)

تشغيل الانتقال

ضع تغيير الحالة داخل withAnimation لتحريك الهندسة بين العرضين.

Button("Expand") {
  withAnimation(.spring()) {
    isExpanded.toggle()
  }
}

الانتقال البطولي من القائمة إلى التفاصيل

نمط hero شائع: اضغط على عنصر في قائمة، فيتوسع إلى تفاصيل تملأ الشاشة باستخدام matchedGeometryEffect.

ForEach(items) { item in
  ThumbnailRow(item: item)
    .matchedGeometryEffect(id: item.id, in: ns)
    .onTapGesture { withAnimation { selected = item } }
}
if let sel = selected {
  DetailView(item: sel)
    .matchedGeometryEffect(id: sel.id, in: ns)
}

مَعلمة isSource

عندما يشترك عرضان في المعرّف نفسه، حدّد الأصل باستخدام isSource: true (وهو الإعداد الافتراضي)، والوجهة باستخدام isSource: false.

SmallImage()
  .matchedGeometryEffect(id: "img", in: ns, isSource: true)
LargeImage()
  .matchedGeometryEffect(id: "img", in: ns, isSource: false)

خصائص الارتساء والحجم

خصّص نقطة الارتساء وخصائص الهندسة التي ستتم مطابقتها، مثل الموضع والحجم.

.matchedGeometryEffect(
  id: "box",
  in: ns,
  anchor: .center,
  properties: [.position, .size]
)

الدمج مع AnyTransition

ادمج الحركة البطولية مع .transition للتحكم أيضًا في كيفية تلاشي المحتوى أو انزلاقه إلى الظهور.

DetailView()
  .matchedGeometryEffect(id: "card", in: ns)
  .transition(.opacity)

حركات بطولية متعددة في قائمة

استخدم معرّفات فريدة مشتقة من معرّفات العناصر لتشغيل حركات بطولية مستقلة متعددة.

ForEach(products) { p in
  ProductCard(p)
    .matchedGeometryEffect(id: p.id, in: ns)
}

الأخطاء الشائعة

يجب ألا يظهر العرضان اللذان يحملان المعرّف نفسه في الوقت نفسه؛ ينبغي أن يكون أحدهما فقط مرئيًا في أي لحظة، وإلا فستظهر مشكلات في تخطيط الواجهة.

// Wrong: both views visible at same time
Small().matchedGeometryEffect(id: "x", in: ns)
Large().matchedGeometryEffect(id: "x", in: ns)
// Correct: use if/else or ZStack with opacity toggling

نصيحة حول الأداء

اجعل العروض المتطابقة بسيطة وخفيفة. فقد تؤدي التسلسلات الهرمية المعقدة داخلها إلى إسقاط إطارات أثناء الحركة.

// Prefer simple shapes inside matched containers
// Move heavy content outside the matched frame

فحص سريع

ما المطلوب لربط عرضين بصفتهما المصدر والوجهة في انتقال بطولي؟

مراجعة الدرس

أنشئ انتقالات بطولية باستخدام @Namespace و.matchedGeometryEffect(id:in:). ضع تغييرات الحالة داخل withAnimation. وتأكد من ظهور عرض متطابق واحد فقط في كل مرة لتجنب تعارضات التخطيط.

البدء مجانًا

تعلم Swift مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
122
الدروس
409

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

هل درس «‏matchedGeometryEffect للانتقالات البارزة» مجاني؟

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

ماذا ستتعلم في «‏matchedGeometryEffect للانتقالات البارزة»؟

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

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

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

كم من الوقت يستغرق درس «‏matchedGeometryEffect للانتقالات البارزة»؟

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

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

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

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

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