Middle
Kas yra matchedGeometryEffect ir kaip jį naudoti SwiftUI?
sobes.tech AI
Atsakymas iš AI
matchedGeometryEffect yra SwiftUI modifikatorius, leidžiantis sklandžiai animuoti vaizdo dydžio ir padėties pokyčius pereinant tarp skirtingų būsenų ar hierarchijų. Jis sinchronizuoja geometriją (dydį ir padėtį) skirtingose hierarchijos dalyse, sukurdami "atitikties" efektą.
Naudojimas:
-
idir animacijos srities apibrėžimas:- Priskirti unikalų
idvisiems vaizdams, kurie turi būti sinchronizuoti, naudojantmatchedGeometryEffectmodifikatorių. - Nurodyti
namespace(animacijos vardų sritį).namespacesujungia vaizdus, kurie turi būti animuojami kartu. Paprastai naudojama anotacija@Namespace private var namespace.
- Priskirti unikalų
-
Taikymas vaizdams:
- Taikyti
matchedGeometryEffectkiekvienam vaizdui, kuris dalyvauja animacijoje, nurodant tą patįidirnamespace. - Keisti vaizdų matomumą ar padėtį, pvz., naudojant
if/elsesąlygas arba keičiant būseną, kuri veikia išdėstymą. SwiftUI automatiškai animuoja perėjimą.
- Taikyti
struct ContentView: View {
@Namespace private var animationNamespace // Vardo srities deklaravimas
@State private var isExpanded = false
var body: some View {
VStack {
if isExpanded {
RoundedRectangle(cornerRadius: 10)
.fill(Color.blue)
.matchedGeometryEffect(id: "myShape", in: animationNamespace) // Naudojimas su id ir namespace
.frame(width: 300, height: 200)
} else {
RoundedRectangle(cornerRadius: 10)
.fill(Color.red)
.matchedGeometryEffect(id: "myShape", in: animationNamespace) // Naudojimas su tuo pačiu id ir namespace
.frame(width: 50, height: 50)
}
Button("Toggle Size") {
withAnimation { // Naudojimas suAnimation sklandžiam perėjimui
isExpanded.toggle()
}
}
}
}
}
Pagrindinės pastabos:
- Toks pat
idirnamespacenaudojami lyginamiems vaizdams. - Pokyčiai turi įvykti animacijos bloko viduje (pvz., su
withAnimation). - Leidžia kurti sudėtingus perėjimus tarp skirtingų išdėstymo būsenų.
- Gali būti naudojamas su įvairiais modifikatoriais, kurie veikia dydį ir padėtį (
frame,padding,offsetir kt.).
matchedGeometryEffect žymiai supaprastina sudėtingų vaizdo transformacijos animacijų kūrimą, palyginti su rankiniu būdu skaičiuojant ir animuojant rėmo parametrus.