Sobes.tech
Middle

Τι είναι το matchedGeometryEffect στο SwiftUI;

sobes.tech AI

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

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

Βασικές αρχές:

  • Ταύτιση αναγνωριστικών: Δίνετε το ίδιο id στις εμφανίσεις που θέλετε να κινούνται με animation κατά τη μετάβαση.
  • Πηγή και προορισμός: Ορίζετε ένα χώρο ονομάτων (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 με το αναγνωριστικό `