Sobes.tech
Middle

Какво е matchedGeometryEffect и как да го използвате в SwiftUI?

sobes.tech AI

Отговор от AI

matchedGeometryEffect е модификатор в SwiftUI, който позволява плавно анимиране на промяната на размера и позицията на изгледа при преход между различни състояния или йерархии на изгледи. Той синхронизира геометрията (размер и позиция) на изгледите в различни части на йерархията, създавайки ефект на "съвпадение".

Използване:

  1. Дефиниране на id и анимационно пространство:

    • Трябва да се присвои уникален id на всички изгледи, които трябва да бъдат синхронизирани, използвайки модификатора matchedGeometryEffect.
    • Да се посочи namespace (пространство за имена на анимацията). namespace свързва изгледите, които трябва да се анимират заедно. Обикновено се използва анотацията @Namespace private var namespace.
  2. Приложение към изгледи:

    • Да се приложи 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 значително улеснява създаването на сложни анимации на трансформация на изгледи в сравнение с ръчното изчисляване и анимация на параметрите на рамката.