Sobes.tech
Middle+

Τι είναι το matchedGeometryEffect και πώς χρησιμοποιείται στο SwiftUI;

sobes.tech AI

Απάντηση από AI

Το matchedGeometryEffect στο SwiftUI χρησιμοποιείται για τη δημιουργία μιας ομαλής μετάβασης μεταξύ δύο προβολών που αντιπροσωπεύουν το ίδιο οπτικό στοιχείο σε διαφορετικά σχέδια. Συνδέει τη γεωμετρία μιας προβολής σε μια κατάσταση με τη γεωμετρία μιας άλλης προβολής σε μια άλλη κατάσταση, επιτρέποντας στο SwiftUI να ανιχνεύει αυτόματα τις αλλαγές και να τις κινούσε με animation.

Χρησιμοποιείται εφαρμόζοντας τον τροποποιητή .matchedGeometryEffect και στις δύο προβολές που θέλουμε να συνδέσουμε. Ο τροποποιητής δέχεται τρεις παραμέτρους:

  1. id: Μοναδικός αναγνωριστικός κωδικός για τη σύνδεση των προβολών.
  2. in: Χώρος ονομάτων (Namespace) στον οποίο καταχωρείται ο αναγνωριστικός κωδικός. Συνήθως δημιουργείται με @Namespace.
  3. properties: Σύνολο ιδιοτήτων γεωμετρίας που θα κινούνται με animation (π.χ. .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 ανιχνεύει την αλλαγή και δημιουργεί μια ομαλή μετάβαση, μετακινώντας και αλλάζοντας το μέγεθος του ορθογωνίου με animation.