Sobes.tech
Middle+

Co je to matchedGeometryEffect a jak se používá ve SwiftUI?

sobes.tech AI

Odpověď od AI

matchedGeometryEffect ve SwiftUI se používá k vytvoření plynulé přechodové animace mezi dvěma pohledy, které představují stejný vizuální prvek v různých rozvrženích. Spojuje geometrii pohledu v jednom stavu s geometrií jiného pohledu v jiném stavu, což umožňuje SwiftUI automaticky animovat změny.

Používá se aplikací modifikátoru .matchedGeometryEffect na oba pohledy, které mají být spojeny. Modifikátor přijímá tři parametry:

  1. id: Unikátní identifikátor pro spojení pohledů.
  2. in: Prostor jmen (Namespace), ve kterém je identifikátor zaregistrován. Obvykle se vytváří pomocí @Namespace.
  3. properties: Sada geometrických vlastností, které mají být animovány (například .position, .size, .frame).

Příklad použití:

struct ContentView: View {
    @Namespace private var animation
    @State private var isExpanded = false

    var body: some View {
        VStack {
            if isExpanded {
                Rectangle()
                    .fill(Color.blue)
                    .matchedGeometryEffect(id: "myShape", in: animation)
                    .frame(width: 200, height: 200)
                    .onTapGesture {
                        withAnimation {
                            isExpanded.toggle()
                        }
                    }
            } else {
                Rectangle()
                    .fill(Color.red)
                    .matchedGeometryEffect(id: "myShape", in: animation)
                    .frame(width: 50, height: 50)
                    .onTapGesture {
                        withAnimation {
                            isExpanded.toggle()
                        }
                    }
            }
        }
    }
}

V tomto příkladu matchedGeometryEffect spojuje dva Rectangle s tím samým id ("myShape") a ve stejném prostoru jmen (animation). Když se isExpanded změní, SwiftUI automaticky animuje přechod mezi dvěma stavy, vytvářející plynulý efekt změny velikosti a polohy obdélníku.