Kahraman Geçişleri için matchedGeometryEffect
Ad alanı ve eşleşen kimliklerle görünümler arasında kesintisiz kahraman animasyonları oluşturun.
Kahraman Geçişleri için matchedGeometryEffect, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Swift Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Swift Academy kursu toplamda 4 dersten oluşur.
matchedGeometryEffect Nedir?
matchedGeometryEffect, bir görünümün iki durum arasındaki konumunu ve boyutunu canlandırarak bir "hero" geçişi oluşturur.
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 Oluşturma
Üst görünümde bir @Namespace bildirin. Eşleştirilen tüm görünümler bu ad alanını paylaşır.
struct ParentView: View {
@Namespace private var heroNamespace
}Değiştiriciyi Uygulama
Kaynak ve hedef görünümlere aynı id ile .matchedGeometryEffect(id:in:) uygulayın.
Image("cover")
.matchedGeometryEffect(id: "albumArt", in: heroNamespace)Geçişi Tetikleme
İki görünüm arasındaki geometrinin canlandırılması için durum değişikliğini withAnimation içine alın.
Button("Expand") {
withAnimation(.spring()) {
isExpanded.toggle()
}
}Listeden Ayrıntıya Geçiş
Klasik bir geçiş deseni: bir liste öğesine dokunduğunuzda öğe, matchedGeometryEffect kullanılarak tam ekran bir ayrıntı görünümüne genişler.
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 Parametresi
İki görünüm aynı kimliği paylaştığında, kaynak görünümü isSource: true (varsayılan), hedef görünümü ise isSource: false olarak işaretleyin.
SmallImage()
.matchedGeometryEffect(id: "img", in: ns, isSource: true)
LargeImage()
.matchedGeometryEffect(id: "img", in: ns, isSource: false)Bağlantı Noktası ve Boyut Özellikleri
Hangi bağlantı noktasının ve hangi geometri özelliklerinin (konum/boyut) eşleştirileceğini özelleştirin.
.matchedGeometryEffect(
id: "box",
in: ns,
anchor: .center,
properties: [.position, .size]
)AnyTransition ile Birleştirme
İçeriğin nasıl belireceğini veya kayarak nasıl görüneceğini de denetlemek için hero animasyonunu .transition ile birleştirin.
DetailView()
.matchedGeometryEffect(id: "card", in: ns)
.transition(.opacity)Listede Birden Çok Geçiş
Birden çok bağımsız hero animasyonu çalıştırmak için öğe tanımlayıcılarından türetilen benzersiz kimlikler kullanın.
ForEach(products) { p in
ProductCard(p)
.matchedGeometryEffect(id: p.id, in: ns)
}Yaygın Tuzaklar
Aynı kimliğe sahip iki görünüm aynı anda görünmemelidir — her an yalnızca biri görünür olmalıdır; aksi takdirde yerleşim sorunları görürsünüz.
// 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 togglingPerformans İpucu
Eşleştirilen görünümleri yalın tutun. Eşleştirilen görünümlerin içindeki karmaşık hiyerarşiler, animasyon sırasında karelerin atlanmasına neden olabilir.
// Prefer simple shapes inside matched containers
// Move heavy content outside the matched frameKısa Kontrol
Bir hero geçişinde iki görünümü kaynak ve hedef olarak bağlamak için ne gereklidir?
Ders Özeti
@Namespace ve .matchedGeometryEffect(id:in:) ile hero geçişleri oluşturun. Durum değişikliklerini withAnimation içine alın. Yerleşim çakışmalarını önlemek için aynı anda yalnızca bir eşleştirilmiş görünümün görünür olduğundan emin olun.
Sıkça Sorulan Sorular
“Kahraman Geçişleri için matchedGeometryEffect” dersi ücretsiz mi?
Evet — “Kahraman Geçişleri için matchedGeometryEffect” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Swift Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Swift Academy kursu toplamda 4 dersten oluşur.
“Kahraman Geçişleri için matchedGeometryEffect” dersinde ne öğreneceğim?
Ad alanı ve eşleşen kimliklerle görünümler arasında kesintisiz kahraman animasyonları oluşturun. Swift Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Swift Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Swift Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Kahraman Geçişleri için matchedGeometryEffect” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Swift Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Swift Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Örtük ve Açık Animasyonlar
- Kahraman Geçişleri için matchedGeometryEffect
- Özel AnimatableModifier ve Animatable
- Yüksek Başarımlı Çizim için TimelineView ve Canvas