Sobes.tech
Middle

Ce este matchedGeometryEffect în SwiftUI?

sobes.tech AI

Răspuns de la AI

matchedGeometryEffect în SwiftUI este un modifier care permite animarea lină a schimbării dimensiunii și poziției vizualizărilor în timpul deplasării lor între diferite ierarhii sau containere.

Principii de bază:

  • Potrivirea identificatorilor: Indicați același id pentru vizualizările pe care doriți să le animați în timpul tranziției.
  • Sursa și destinația: Specificați un spațiu de nume (namespace) care le unește.
  • Animare automată: SwiftUI calculează automat stările intermediare și animează tranziția de la o stare la alta.

Aplicare:

import SwiftUI

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

    var body: some View {
        VStack {
            if isExpanded {
                RoundedRectangle(cornerRadius: 10)
                    .fill(Color.blue)
                    .matchedGeometryEffect(id: "box", in: namespace)
                    .frame(width: 200, height: 200)
                    .onTapGesture {
                        withAnimation {
                            isExpanded.toggle()
                        }
                    }
            } else {
                RoundedRectangle(cornerRadius: 5)
                    .fill(Color.red)
                    .matchedGeometryEffect(id: "box", in: namespace)
                    .frame(width: 50, height: 50)
                    .onTapGesture {
                        withAnimation {
                            isExpanded.toggle()
                        }
                    }
            }
        }
    }
}

În acest exemplu, RoundedRectangle își schimbă dimensiunea și culoarea în timpul comutării între stările isExpanded, folosind matchedGeometryEffect cu identificatorul `