Middle
Co je to matchedGeometryEffect a jak ho používat ve SwiftUI?
sobes.tech AI
Odpověď od AI
matchedGeometryEffect - je modifikátor ve SwiftUI, který umožňuje plynule animovat změnu velikosti a polohy zobrazení při přechodu mezi různými stavy nebo hierarchiemi zobrazení. Synchronizuje geometrii (velikost a polohu) zobrazení v různých částech hierarchie a vytváří efekt "shody".
Použití:
-
Definice
ida animačního prostoru:- Je nutné přiřadit unikátní
idvšem zobrazením, která mají být synchronizována, pomocí modifikátorumatchedGeometryEffect. - Určit
namespace(prostor jmen animace).namespacespojuje zobrazení, která mají být animována společně. Obvykle se používá anotace@Namespace private var namespace.
- Je nutné přiřadit unikátní
-
Aplikace na zobrazení:
- Aplikovat
matchedGeometryEffectna každé zobrazení, které se účastní animace, s uvedením stejnéhoidanamespace. - Měnit viditelnost nebo polohu zobrazení, například pomocí podmínek
if/elsenebo změnou stavu, který ovlivňuje rozložení. SwiftUI automaticky animuje přechod.
- Aplikovat
struct ContentView: View {
@Namespace private var animationNamespace // Deklarace prostoru jmen
@State private var isExpanded = false
var body: some View {
VStack {
if isExpanded {
RoundedRectangle(cornerRadius: 10)
.fill(Color.blue)
.matchedGeometryEffect(id: "myShape", in: animationNamespace) // Použití s id a namespace
.frame(width: 300, height: 200)
} else {
RoundedRectangle(cornerRadius: 10)
.fill(Color.red)
.matchedGeometryEffect(id: "myShape", in: animationNamespace) // Použití se stejným id a namespace
.frame(width: 50, height: 50)
}
Button("Toggle Size") {
withAnimation { // Použití withAnimation pro plynulý přechod
isExpanded.toggle()
}
}
}
}
}
Klíčové body:
- Stejné
idanamespacepro srovnávaná zobrazení. - Změny by měly probíhat uvnitř bloku animace (například s
withAnimation). - Umožňuje vytvářet složité přechody mezi různými stavy rozložení.
- Může být použit s různými modifikátory ovlivňujícími velikost a polohu (
frame,padding,offsetatd.).
matchedGeometryEffect výrazně zjednodušuje tvorbu složitých animací transformace zobrazení ve srovnání s ručním výpočtem a animací parametrů rámce.