Sobes.tech
Middle+

რა არის matchedGeometryEffect და როგორ გამოიყენება SwiftUI-ში?

sobes.tech AI

პასუხი AI-სგან

matchedGeometryEffect SwiftUI-ში გამოიყენება სუფთა ანიმაციის შესაქმნელად ორ წარმოდგენას შორის, რომლებიც წარმოადგენენ ერთ ვიზუალურ ელემენტს სხვადასხვა განლაგებებში. იგი აკავშირებს ერთ მდგომარეობაში წარმოდგენილი ელემენტის გეომეტრიას სხვა მდგომარეობაში, რაც SwiftUI-ს საშუალებას აძლევს ავტომატურად ანიმიროს ცვლილებები.

გამოყენება ხდება ორივე წარმოდგენის მიმართ .matchedGeometryEffect მორგებით, რომლებიც უნდა იყოს დაკავშირებული. მორგებელი იღებს სამი პარამეტრს:

  1. id: უნიკალური იდენტიფიკატორი დაკავშირებული წარმოდგენებისთვის.
  2. in: სახელობის სივრცე (Namespace), სადაც რეგისტრირებულია იდენტიფიკატორი. ჩვეულებრივ, შექმნილია @Namespace-ის გამოყენებით.
  3. properties: გეომეტრიის თვისებები, რომლებიც უნდა იყოს ანიმირებული (მაგალითად, .position, .size, .frame).

გამოყენების მაგალითი:

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

ამ მაგალითში, .matchedGeometryEffect აკავშირებს ორ Rectangle-ს ერთსა და იმავე id-ს ("myShape") და ერთსა და იმავე სახელობის სივრცეში (animation). როდესაც isExpanded იცვლება, SwiftUI ავტომატურად ანიმირებს ორ მდგომარეობას შორის გადასვლას, ქმნის სუფთა ცვლილების ეფექტს ზომასა და პოზიციაში.