SwiftUI animuje zmiany stanu. Kiedy wartość taka jak isExpanded zmieni się wewnątrz withAnimation(.spring), każdy widok od niej zależny zostanie przeniesiony do nowego układu za pomocą sprężyny.
W systemie iOS 17 i nowszych wersjach sprężynę można najprościej opisać za pomocą dwóch wartości: czasu trwania, czyli mniej więcej czasu potrzebnego na ustabilizowanie się, oraz odbicia, czyli stopnia przekroczenia. Odbicie równe 0 zapewnia płynny ruch bez przeregulowania; wyższe wartości dodają odbicie. Apple udostępnia także gotowe ustawienia: .smooth, .snappy i .bouncy.
Starszy kod używa .spring(response:dampingFraction:). Reakcja jest podobna do czasu trwania, a ułamek tłumienia wynoszący 1 oznacza brak odbicia, podczas gdy niższe wartości powodują zwiększenie odbicia. Obie formy opisują tę samą sprężynę fizyczną.
Dużą zaletą sprężyn jest przerwanie. Jeśli użytkownik dotknie ponownie lub gest przeciągania zakończy się w połowie animacji, nowa sprężyna zacznie działać od bieżącego położenia i prędkości, więc nie będzie żadnego skoku. W przypadku gestów przeciągania należy przekazać prędkość gestu, gdy użytkownik puści, tak aby element kontynuował ruch w kierunku, w którym został rzucony.
Jeśli ten sam komponent musi także działać w Internecie lub na Androidzie, pomaga zachowanie wartości sprężyn w postaci współdzielonych tokenów ruchu. ExodeUI, który wykonujemy, ma środowisko wykonawcze SwiftUI, więc jeden zaprojektowany komponent wraz ze sprężynami może grać w SwiftUI i na innych platformach.