SwiftUI animerar tillståndsändringar. När ett värde som isExpanded ändras inuti withAnimation(.spring), flyttas varje vy som beror på det till sin nya layout med hjälp av en fjäder.
I iOS 17 och senare är det enklaste sättet att beskriva en fjäder med två värden: varaktighet, ungefär hur lång tid det tar att sätta sig, och studs, hur mycket den överskrider. En studs på 0 ger jämna rörelser utan överskjutning; högre värden lägger till studs. Apple tillhandahåller även förinställningar: .smooth, .snappy och .bouncy.
Äldre kod använder .spring(respons:dampingFraction:). Svaret liknar varaktigheten, och en dämpningsandel på 1 betyder ingen studs medan lägre värden lägger till studs. Båda formerna beskriver samma fysiska vår.
Den stora fördelen med fjädrar är avbrott. Om en användare trycker igen eller en draggest avslutas mitt i animeringen, startar den nya fjädern från den aktuella positionen och hastigheten, så det finns inget hopp. För draggester, passera gestens hastighet när användaren släpper, så att elementet fortsätter i den riktning som det kastades.
Om samma komponent också behöver köras på webben eller Android, hjälper det att behålla fjädervärden som delade rörelsetokens. ExodeUI, som vi tillverkar, har en SwiftUI körtid, så en designad komponent med sina fjädrar kan spela i SwiftUI och på andra plattformar.