Το SwiftUI ζωντανεύει αλλαγές στην κατάσταση. Όταν μια τιμή όπως το isExpanded αλλάζει μέσα στο withAnimation(.spring), κάθε προβολή που εξαρτάται από αυτήν μετακινείται στη νέα της διάταξη χρησιμοποιώντας ένα ελατήριο.
Στο iOS 17 και νεότερες εκδόσεις, ο απλούστερος τρόπος για να περιγράψετε ένα ελατήριο είναι με δύο τιμές: διάρκεια, περίπου πόσος χρόνος χρειάζεται για να εγκατασταθεί και αναπήδηση, πόσο υπερβαίνει. Μια αναπήδηση 0 δίνει ομαλή κίνηση χωρίς υπέρβαση. υψηλότερες τιμές προσθέτουν αναπήδηση. Η Apple παρέχει επίσης προεπιλογές: .smooth, .snappy και .bouncy.
Ο παλαιότερος κώδικας χρησιμοποιεί .spring(response:dampingFraction:). Η απόκριση είναι παρόμοια με τη διάρκεια και ένα κλάσμα απόσβεσης 1 σημαίνει μη αναπήδηση ενώ χαμηλότερες τιμές προσθέτουν αναπήδηση. Και οι δύο μορφές περιγράφουν το ίδιο φυσικό ελατήριο.
Το μεγάλο πλεονέκτημα των ελατηρίων είναι η διακοπή. Εάν ένας χρήστης πατήσει ξανά ή μια χειρονομία μεταφοράς τελειώσει στο μέσο της κίνησης, το νέο ελατήριο ξεκινά από την τρέχουσα θέση και ταχύτητα, οπότε δεν υπάρχει άλμα. Για χειρονομίες μεταφοράς, περάστε την ταχύτητα της κίνησης όταν ο χρήστης απελευθερώσει, έτσι ώστε το στοιχείο να συνεχίσει προς την κατεύθυνση που εκτοξεύτηκε.
Εάν το ίδιο στοιχείο πρέπει επίσης να εκτελείται στον ιστό ή στο Android, η διατήρηση των τιμών ελατηρίου ως κοινόχρηστα διακριτικά κίνησης βοηθά. Το ExodeUI, το οποίο κατασκευάζουμε, έχει χρόνο εκτέλεσης SwiftUI, επομένως ένα σχεδιασμένο εξάρτημα με τα ελατήρια του μπορεί να παίξει στο SwiftUI και σε άλλες πλατφόρμες.