Middle
Какво е matchedGeometryEffect и как да го използвате в SwiftUI?
sobes.tech AI
Отговор от AI
matchedGeometryEffect е модификатор в SwiftUI, който позволява плавно анимиране на промяната на размера и позицията на изгледа при преход между различни състояния или йерархии на изгледи. Той синхронизира геометрията (размер и позиция) на изгледите в различни части на йерархията, създавайки ефект на "съвпадение".
Използване:
-
Дефиниране на
idи анимационно пространство:- Трябва да се присвои уникален
idна всички изгледи, които трябва да бъдат синхронизирани, използвайки модификатораmatchedGeometryEffect. - Да се посочи
namespace(пространство за имена на анимацията).namespaceсвързва изгледите, които трябва да се анимират заедно. Обикновено се използва анотацията@Namespace private var namespace.
- Трябва да се присвои уникален
-
Приложение към изгледи:
- Да се приложи
matchedGeometryEffectкъм всеки изглед, участващ в анимацията, като се посочи същиятidиnamespace. - Да се променя видимостта или позицията на изгледите, например чрез условия
if/elseили чрез промяна на състоянието, което влияе на разположението. SwiftUI автоматично анимира прехода.
- Да се приложи
struct ContentView: View {
@Namespace private var animationNamespace // Обявяване на пространство за имена
@State private var isExpanded = false
var body: some View {
VStack {
if isExpanded {
RoundedRectangle(cornerRadius: 10)
.fill(Color.blue)
.matchedGeometryEffect(id: "myShape", in: animationNamespace) // Приложение с id и namespace
.frame(width: 300, height: 200)
} else {
RoundedRectangle(cornerRadius: 10)
.fill(Color.red)
.matchedGeometryEffect(id: "myShape", in: animationNamespace) // Приложение със същия id и namespace
.frame(width: 50, height: 50)
}
Button("Toggle Size") {
withAnimation { // Използване на withAnimation за плавен преход
isExpanded.toggle()
}
}
}
}
}
Ключови моменти:
- Един и същ
idиnamespaceза съпоставяните изгледи. - Промените трябва да се случват в рамките на блока за анимация (например с
withAnimation). - Позволява създаването на сложни преходи между различни състояния на разположение.
- Може да се използва с различни модификатори, влияещи на размера и позицията (
frame,padding,offsetи др.).
matchedGeometryEffect значително улеснява създаването на сложни анимации на трансформация на изгледи в сравнение с ръчното изчисляване и анимация на параметрите на рамката.