SwiftUI animoi tilan muutokset. Kun arvo, kuten isExpanded, muuttuu animaation(.spring) sisällä, jokainen siitä riippuvainen näkymä siirtyy uuteen asetteluun jousen avulla.
iOS 17:ssä ja uudemmissa versioissa yksinkertaisin tapa kuvata jousta on kaksi arvoa: kesto, suunnilleen kuinka kauan sen asettuminen kestää, ja pomppiminen, kuinka paljon se ylittää. Pomppu 0 antaa tasaisen liikkeen ilman ylitystä; korkeammat arvot lisäävät pomppimista. Apple tarjoaa myös esiasetuksia: .smooth, .snappy ja .bouncy.
Vanhempi koodi käyttää .spring(response:dampingFraction:). Vaste on samanlainen kuin kesto, ja vaimennusosuus 1 tarkoittaa, ettei pomppimista ole, kun taas pienemmät arvot lisäävät pomppimista. Molemmat muodot kuvaavat samaa fyysistä jousta.
Jousien suuri etu on keskeytys. Jos käyttäjä napauttaa uudelleen tai vetämisele päättyy animaation puolivälissä, uusi jousi alkaa nykyisestä sijainnista ja nopeudesta, joten hyppyä ei tapahdu. Vetoeleissä ohita eleen nopeus, kun käyttäjä päästää irti, jotta elementti jatkaa heittämissuuntaan.
Jos saman komponentin on toimittava myös verkossa tai Androidissa, jousiarvojen säilyttäminen jaetuina liiketokeneina auttaa. Valmistamamme ExodeUI:n käyttöaika on SwiftUI, joten yksi suunniteltu komponentti jousineen voi toimia SwiftUI:ssä ja muilla alustoilla.