matchedGeometryEffect สำหรับการเปลี่ยนฉากแบบฮีโร่
สร้างแอนิเมชันฮีโร่ระหว่าง View ได้อย่างต่อเนื่องด้วยเนมสเปซและ ID ที่จับคู่กัน
matchedGeometryEffect สำหรับการเปลี่ยนฉากแบบฮีโร่ เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
matchedGeometryEffect คืออะไร
matchedGeometryEffect ทำให้ตำแหน่งและขนาดของวิวเคลื่อนไหวระหว่างสองสถานะ และสร้างการเปลี่ยนผ่านแบบ "ฮีโร่" ได้
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
ประกาศ @Namespace ในวิว parent วิวทั้งหมดที่จับคู่กันจะใช้เนมสเปซนี้ร่วมกัน
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()
}
}ฮีโร่จากรายการไปยังรายละเอียด
รูปแบบฮีโร่แบบคลาสสิก: แตะรายการในรายการ แล้วรายการนั้นจะขยายเป็นรายละเอียดเต็มหน้าจอโดยใช้ 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
เมื่อวิวสองรายการใช้ id เดียวกัน ให้ระบุต้นทางด้วย 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)ฮีโร่หลายรายการในรายการ
ใช้ ID ที่ไม่ซ้ำกันซึ่งสร้างจากตัวระบุรายการ เพื่อเรียกใช้แอนิเมชันแบบฮีโร่ที่เป็นอิสระต่อกันหลายรายการ
ForEach(products) { p in
ProductCard(p)
.matchedGeometryEffect(id: p.id, in: ns)
}ข้อผิดพลาดที่พบบ่อย
วิวทั้งสองรายการที่มี ID เดียวกันต้องไม่ปรากฏพร้อมกัน — ควรแสดงเพียงหนึ่งรายการในแต่ละครั้ง มิฉะนั้นจะเห็นปัญหาการจัดวาง
// 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 ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 122
- บทเรียน
- 409
คำถามที่พบบ่อย
บทเรียน “matchedGeometryEffect สำหรับการเปลี่ยนฉากแบบฮีโร่” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “matchedGeometryEffect สำหรับการเปลี่ยนฉากแบบฮีโร่” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “matchedGeometryEffect สำหรับการเปลี่ยนฉากแบบฮีโร่”
สร้างแอนิเมชันฮีโร่ระหว่าง View ได้อย่างต่อเนื่องด้วยเนมสเปซและ ID ที่จับคู่กัน คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “matchedGeometryEffect สำหรับการเปลี่ยนฉากแบบฮีโร่” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม
ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- แอนิเมชันโดยนัยและโดยชัดแจ้ง
- matchedGeometryEffect สำหรับการเปลี่ยนฉากแบบฮีโร่
- AnimatableModifier และ Animatable แบบกำหนดเอง
- TimelineView และ Canvas สำหรับการวาดประสิทธิภาพสูง