Sobes.tech
Middle

Šta je matchedGeometryEffect u SwiftUI?

sobes.tech АИ

Одговор од АИ

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 аутоматски анимира ову промену.