matchedGeometryEffect untuk Transisi Hero
Membuat animasi hero yang mulus antara view dengan namespace dan ID yang cocok.
matchedGeometryEffect untuk Transisi Hero adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Swift Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Swift Academy mencakup 4 pelajaran total.
Apa itu matchedGeometryEffect?
matchedGeometryEffect menganimasikan posisi dan ukuran tampilan di antara dua status, sehingga menciptakan transisi "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)
}
}
}Membuat Namespace
Deklarasikan @Namespace di tampilan induk. Semua tampilan yang dicocokkan menggunakan namespace ini.
struct ParentView: View {
@Namespace private var heroNamespace
}Menerapkan Modifier
Terapkan .matchedGeometryEffect(id:in:) dengan id yang sama pada tampilan sumber dan tujuan.
Image("cover")
.matchedGeometryEffect(id: "albumArt", in: heroNamespace)Memicu Transisi
Bungkus perubahan status dengan withAnimation untuk menganimasikan geometri di antara kedua tampilan.
Button("Expand") {
withAnimation(.spring()) {
isExpanded.toggle()
}
}Hero dari Daftar ke Detail
Pola hero klasik: ketuk item dalam daftar, lalu item tersebut meluas menjadi detail layar penuh menggunakan 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)
}Parameter isSource
Saat dua tampilan menggunakan id yang sama, tandai asal dengan isSource: true (bawaan) dan tujuan dengan isSource: false.
SmallImage()
.matchedGeometryEffect(id: "img", in: ns, isSource: true)
LargeImage()
.matchedGeometryEffect(id: "img", in: ns, isSource: false)Properti Jangkar dan Ukuran
Sesuaikan titik jangkar serta properti geometri (posisi/ukuran) yang akan dicocokkan.
.matchedGeometryEffect(
id: "box",
in: ns,
anchor: .center,
properties: [.position, .size]
)Menggabungkan dengan AnyTransition
Gabungkan animasi hero dengan .transition untuk mengatur cara konten memudar atau bergeser masuk.
DetailView()
.matchedGeometryEffect(id: "card", in: ns)
.transition(.opacity)Beberapa Hero dalam Daftar
Gunakan ID unik yang berasal dari pengenal item untuk menjalankan beberapa animasi hero yang independen.
ForEach(products) { p in
ProductCard(p)
.matchedGeometryEffect(id: p.id, in: ns)
}Kesalahan Umum
Kedua tampilan dengan ID yang sama tidak boleh muncul secara bersamaan — hanya satu yang boleh terlihat pada satu waktu, atau Anda akan melihat gangguan tata letak.
// 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 togglingTips Performa
Buat tampilan yang dicocokkan tetap ringan. Hierarki kompleks di dalam tampilan tersebut dapat menyebabkan frame terlewat selama animasi.
// Prefer simple shapes inside matched containers
// Move heavy content outside the matched framePemeriksaan Singkat
Apa yang diperlukan untuk menghubungkan dua tampilan sebagai sumber dan tujuan dalam transisi hero?
Ringkasan Pelajaran
Buat transisi hero dengan @Namespace dan .matchedGeometryEffect(id:in:). Bungkus perubahan status dengan withAnimation. Pastikan hanya satu tampilan yang dicocokkan terlihat pada satu waktu untuk menghindari konflik tata letak.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “matchedGeometryEffect untuk Transisi Hero” gratis?
Ya — teks lengkap “matchedGeometryEffect untuk Transisi Hero” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Swift Academy, upgrade ke CoddyKit PRO. Kursus Swift Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “matchedGeometryEffect untuk Transisi Hero”?
Membuat animasi hero yang mulus antara view dengan namespace dan ID yang cocok. Kamu berlatih Swift Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Swift Academy?
Tidak diperlukan pengalaman sebelumnya. Swift Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “matchedGeometryEffect untuk Transisi Hero” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Swift Academy ini?
Ya. Setiap pelajaran Swift Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Animasi Implisit vs Eksplisit
- matchedGeometryEffect untuk Transisi Hero
- AnimatableModifier dan Animatable Kustom
- TimelineView dan Canvas untuk Gambar Berkinerja Tinggi