Sobes.tech
Middle

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

sobes.tech AI

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

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

Χρήση:

  1. Ορισμός id και χώρου κινούμενων εικόνων:

    • Ανάθεση ενός μοναδικού id σε όλες τις προβολές που πρέπει να συγχρονιστούν, χρησιμοποιώντας τον τροποποιητή matchedGeometryEffect.
    • Ορισμός namespace (χώρος ονομάτων). Το namespace συνδέει τις προβολές που πρέπει να κινούνται μαζί. Συνήθως, χρησιμοποιείται η διακόσμηση @Namespace private var namespace.
  2. Εφαρμογή στις προβολές:

    • Εφαρμόστε το matchedGeometryEffect σε κάθε προβολή που συμμετέχει στην κινούμενη εικόνα, αναφέροντας το ίδιο id και namespace.
    • Αλλάξτε την ορατότητα ή τη θέση των προβολών, π.χ., χρησιμοποιώντας συνθήκες if/else ή αλλάζοντας την κατάσταση που επηρεάζει τη διάταξη. Το SwiftUI αυτοματοποιεί τη μετάβαση.
struct ContentView: View {
    @Namespace private var animationNamespace // Δήλωση χώρου ονομάτων
    @State private var isExpanded = false

    var body: some View {
        VStack {
            if isExpanded {
                RoundedRectangle(cornerRadius: 10)
                    .fill(Color.blue)
                    .matchedGeometryEffect(id: "myShape", in: animationNamespace) // Εφαρμογή με id και namespace
                    .frame(width: 300, height: 200)
            } else {
                RoundedRectangle(cornerRadius: 10)
                    .fill(Color.red)
                    .matchedGeometryEffect(id: "myShape", in: animationNamespace) // Εφαρμογή με το ίδιο id και namespace
                    .frame(width: 50, height: 50)
            }

            Button("Toggle Size") {
                withAnimation { // Χρήση μεAnimation για ομαλή μετάβαση
                    isExpanded.toggle()
                }
            }
        }
    }
}

Βασικά σημεία:

  • Το ίδιο id και namespace για τις αντίστοιχες προβολές.
  • Οι αλλαγές πρέπει να γίνονται εντός του μπλοκ της κινούμενης εικόνας (π.χ., με withAnimation).
  • Επιτρέπει τη δημιουργία σύνθετων μεταβάσεων μεταξύ διαφορετικών καταστάσεων διάταξης.
  • Μπορεί να χρησιμοποιηθεί με διάφορους τροποποιητές που επηρεάζουν το μέγεθος και τη θέση (frame, padding, offset, κ.λπ.).

Το matchedGeometryEffect απλοποιεί σημαντικά τη δημιουργία σύνθετων κινούμενων μετασχηματισμών προβολών σε σύγκριση με τον χειροκίνητο υπολογισμό και την κινούμενη εικόνα των παραμέτρων του πλαισίου.