Middle
Czym jest matchedGeometryEffect i jak go używać w SwiftUI?
sobes.tech AI
Odpowiedź od AI
matchedGeometryEffect to modyfikator w SwiftUI, który pozwala na płynne animowanie zmiany rozmiaru i położenia widoku podczas przejścia między różnymi stanami lub hierarchiami widoków. Synchronizuje geometrię (rozmiar i pozycję) widoków w różnych częściach hierarchii, tworząc efekt "dopasowania".
Użycie:
-
Definicja
idi przestrzeni animacji:- Przypisz unikalny
idwszystkim widokom, które mają być synchronizowane, używając modyfikatoramatchedGeometryEffect. - Określ
namespace(przestrzeń nazw animacji).namespacełączy widoki, które mają być animowane razem. Zazwyczaj używa się adnotacji@Namespace private var namespace.
- Przypisz unikalny
-
Zastosowanie do widoków:
- Zastosuj
matchedGeometryEffectdo każdego widoku biorącego udział w animacji, podając ten samidinamespace. - Zmieniaj widoczność lub pozycję widoków, np. używając warunków
if/elselub zmieniając stan wpływający na układ. SwiftUI automatycznie animuje przejście.
- Zastosuj
struct ContentView: View {
@Namespace private var animationNamespace // Deklaracja przestrzeni nazw
@State private var isExpanded = false
var body: some View {
VStack {
if isExpanded {
RoundedRectangle(cornerRadius: 10)
.fill(Color.blue)
.matchedGeometryEffect(id: "myShape", in: animationNamespace) // Zastosowanie z id i namespace
.frame(width: 300, height: 200)
} else {
RoundedRectangle(cornerRadius: 10)
.fill(Color.red)
.matchedGeometryEffect(id: "myShape", in: animationNamespace) // Zastosowanie z tym samym id i namespace
.frame(width: 50, height: 50)
}
Button("Toggle Size") {
withAnimation { // Użycie withAnimation dla płynnego przejścia
isExpanded.toggle()
}
}
}
}
}
Kluczowe punkty:
- Ten sam
idinamespacedla powiązanych widoków. - Zmiany muszą zachodzić w obrębie bloku animacji (np. z
withAnimation). - Umożliwia tworzenie złożonych przejść między różnymi stanami układu.
- Może być używany z różnymi modyfikatorami wpływającymi na rozmiar i pozycję (
frame,padding,offsetitd.).
matchedGeometryEffect znacznie upraszcza tworzenie złożonych animacji transformacji widoków w porównaniu do ręcznego obliczania i animowania parametrów ramki.