SwiftUI anima i cambiamenti di stato. Quando un valore come isExpanded cambia all'interno di withAnimation(.spring), ogni vista che dipende da esso si sposta nel suo nuovo layout utilizzando una molla.
In iOS 17 e versioni successive, il modo più semplice per descrivere una molla è con due valori: durata, all'incirca quanto tempo impiega per stabilizzarsi, e rimbalzo, quanto supera. Un rimbalzo pari a 0 dà un movimento fluido senza superamento; valori più alti aggiungono rimbalzo. Apple fornisce anche preimpostazioni: .smooth, .snappy e .bouncy.
Il codice precedente utilizza .spring(response:dampingFraction:). La risposta è simile alla durata e una frazione di smorzamento pari a 1 significa nessun rimbalzo mentre valori più bassi aggiungono rimbalzo. Entrambe le forme descrivono la stessa molla fisica.
Il grande vantaggio delle molle è l'interruzione. Se un utente tocca di nuovo o un gesto di trascinamento termina nel mezzo dell'animazione, la nuova molla inizia dalla posizione e dalla velocità correnti, quindi non vi è alcun salto. Per i gesti di trascinamento, passa la velocità del gesto quando l'utente rilascia, in modo che l'elemento continui nella direzione in cui è stato lanciato.
Se lo stesso componente deve essere eseguito anche sul Web o su Android, è utile mantenere i valori Spring come token di movimento condivisi. ExodeUI, che produciamo, ha un runtime SwiftUI, quindi un componente progettato con le sue molle può funzionare in SwiftUI e su altre piattaforme.