Sobes.tech
Middle+

matchedGeometryEffect nima va u SwiftUI da qanday ishlatiladi?

sobes.tech AI

AIdan javob

SwiftUI'da matchedGeometryEffect, ayni vizual elementi farklı düzenlerde temsil eden iki görünüm arasında düzgün bir geçiş animasyonu oluşturmak için kullanılır. Bu, bir durumdaki görünümün geometrisini başka bir durumdaki görünümün geometrisiyle bağlar ve SwiftUI'nin değişiklikleri otomatik olarak animasyonla göstermesini sağlar.

Kullanımı, .matchedGeometryEffect modifikatörünün her iki görünüme de uygulanmasıyla gerçekleşir. Bu modifikatör üç parametre alır:

  1. id: Görünümleri bağlamak için benzersiz kimlik.
  2. in: Kimliğin kaydedildiği isim alanı (Namespace). Genellikle @Namespace ile oluşturulur.
  3. properties: Animasyon yapılacak geometrik özellikler (örneğin, .position, .size, .frame).

Kullanım örneği:

struct ContentView: View {
    @Namespace private var animation
    @State private var isExpanded = false

    var body: some View {
        VStack {
            if isExpanded {
                Rectangle()
                    .fill(Color.blue)
                    .matchedGeometryEffect(id: "myShape", in: animation)
                    .frame(width: 200, height: 200)
                    .onTapGesture {
                        withAnimation {
                            isExpanded.toggle()
                        }
                    }
            } else {
                Rectangle()
                    .fill(Color.red)
                    .matchedGeometryEffect(id: "myShape", in: animation)
                    .frame(width: 50, height: 50)
                    .onTapGesture {
                        withAnimation {
                            isExpanded.toggle()
                        }
                    }
            }
        }
    }
}

Bu örnekte, .matchedGeometryEffect aynı id'ye ("myShape") ve aynı isim alanına (animation) sahip iki Rectangle'ı bağlar. isExpanded değiştiğinde, SwiftUI bu iki durum arasındaki geçişi animasyonla gösterir ve dikdörtgenin boyut ve konum değişikliklerini düzgün bir şekilde sağlar.