Sobes.tech
Middle

Какво е matchedGeometryEffect в SwiftUI?

sobes.tech AI

Отговор от AI

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

Основни принципи:

  • Съвпадение на идентификатори: Посочвате същия id за изгледите, които искате да анимирате при преход.
  • Източник и цел: Определяте пространство от имена (namespace), което свързва тези изгледи.
  • Автоматична анимация: SwiftUI автоматично изчислява междинните състояния и анимира прехода от едно състояние към друго.

Приложение:

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()
                        }
                    }
            }
        }
    }
}

В този пример RoundedRectangle променя размера и цвета си при превключване между състоянията isExpanded, използвайки matchedGeometryEffect с идентификатор "box" и пространство от имена namespace. SwiftUI автоматично анимира тази промяна.