Middle
Cos'è matchedGeometryEffect e come usarlo in SwiftUI?
sobes.tech AI
Risposta dell'AI
matchedGeometryEffect è un modificatore in SwiftUI che consente di animare fluidamente il cambiamento di dimensione e posizione di una vista durante il passaggio tra diversi stati o gerarchie di viste. Sincronizza la geometria (dimensione e posizione) delle viste in diverse parti della gerarchia, creando un effetto di "corrispondenza".
Utilizzo:
-
Definizione di
ide spazio di animazione:- Assegnare un
idunico a tutte le viste che devono essere sincronizzate, usando il modificatorematchedGeometryEffect. - Specificare un
namespace(spazio dei nomi dell'animazione). Ilnamespacecollega le viste che devono essere animate insieme. Di solito si usa l'annotazione@Namespace private var namespace.
- Assegnare un
-
Applicazione alle viste:
- Applicare
matchedGeometryEffecta ogni vista che partecipa all'animazione, indicando lo stessoidenamespace. - Modificare la visibilità o la posizione delle viste, ad esempio usando condizioni
if/elseo modificando lo stato che influenza il layout. SwiftUI anima automaticamente la transizione.
- Applicare
struct ContentView: View {
@Namespace private var animationNamespace // Dichiarazione dello spazio dei nomi
@State private var isExpanded = false
var body: some View {
VStack {
if isExpanded {
RoundedRectangle(cornerRadius: 10)
.fill(Color.blue)
.matchedGeometryEffect(id: "myShape", in: animationNamespace) // Applicazione con id e namespace
.frame(width: 300, height: 200)
} else {
RoundedRectangle(cornerRadius: 10)
.fill(Color.red)
.matchedGeometryEffect(id: "myShape", in: animationNamespace) // Applicazione con lo stesso id e namespace
.frame(width: 50, height: 50)
}
Button("Toggle Size") {
withAnimation { // Uso di withAnimation per transizione fluida
isExpanded.toggle()
}
}
}
}
}
Punti chiave:
- Stesso
idenamespaceper viste corrispondenti. - Le modifiche devono avvenire all'interno del blocco di animazione (ad esempio, con
withAnimation). - Permette di creare transizioni complesse tra diversi stati di layout.
- Può essere usato con vari modificatori che influenzano dimensione e posizione (
frame,padding,offset, ecc.).
matchedGeometryEffect semplifica notevolmente la creazione di animazioni di trasformazione complesse rispetto al calcolo e all'animazione manuale dei parametri del frame.