Middle
Czym jest matchedGeometryEffect w SwiftUI?
sobes.tech AI
Odpowiedź od AI
matchedGeometryEffect w SwiftUI to modyfikator, który pozwala na płynne animowanie zmiany rozmiaru i położenia widoków podczas ich przemieszczania się między różnymi hierarchiami lub kontenerami.
Podstawowe zasady:
- Dopasowanie identyfikatorów: Podajesz ten sam identyfikator (
id) dla widoków, które chcesz animować podczas przejścia. - Źródło i cel: Określasz przestrzeń nazw (
namespace), która łączy te widoki. - Automatyczna animacja: SwiftUI automatycznie oblicza stany pośrednie i animuje przejście z jednego stanu do drugiego.
Zastosowanie:
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()
}
}
}
}
}
}
W tym przykładzie, RoundedRectangle zmienia rozmiar i kolor podczas przełączania między stanami isExpanded, używając matchedGeometryEffect z identyfikatorem "box" i przestrzenią nazw namespace. SwiftUI automatycznie animuje tę zmianę.