Sobes.tech
Middle+

Šta je matchedGeometryEffect i kako se koristi u SwiftUI?

sobes.tech АИ

Одговор од АИ

matchedGeometryEffect u SwiftUI se koristi za kreiranje glatke animacije prelaza između dva prikaza koja predstavljaju isti vizuelni element u različitim rasporedima. Povezuje geometriju prikaza u jednom stanju sa geometrijom drugog prikaza u drugom stanju, omogućavajući SwiftUI da automatski animira promene.

Koristi se primenom modifikatora .matchedGeometryEffect na oba prikaza koja treba da budu povezana. Modifikator prihvata tri parametra:

  1. id: Jedinstveni identifikator za povezivanje prikaza.
  2. in: Prostor imena (Namespace) u kojem je registrovan identifikator. Obično se kreira pomoću @Namespace.
  3. properties: Skup geometrijskih svojstava koja treba da budu animirana (npr. .position, .size, .frame).

Primer upotrebe:

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()
                        }
                    }
            }
        }
    }
}

U ovom primeru, .matchedGeometryEffect povezuje dva Rectangle sa istim id ("myShape") i u istom prostoru imena (animation). Kada se isExpanded promeni, SwiftUI automatski animira prelaz između dva stanja, stvarajući glatki efekat promene veličine i položaja pravougaonika.