SwiftUI menganimasikan perubahan status. Ketika nilai seperti isExpanded berubah di dalam withAnimation(.spring), setiap tampilan yang bergantung padanya berpindah ke tata letak baru menggunakan pegas.
Di iOS 17 dan versi lebih baru, cara paling sederhana untuk mendeskripsikan pegas adalah dengan dua nilai: durasi, kira-kira berapa lama waktu yang dibutuhkan untuk menetap, dan pantulan, seberapa besar pegas tersebut melampaui batas. Pantulan 0 memberikan gerakan halus tanpa melampaui batas; nilai yang lebih tinggi menambah pantulan. Apple juga menyediakan preset: .smooth, .snappy, dan .bouncy.
Kode lama menggunakan .spring(response:dampingFraction:). Respon serupa dengan durasi, dan pecahan redaman sebesar 1 berarti tidak ada pantulan, sedangkan nilai yang lebih rendah akan menambah pantulan. Kedua bentuk tersebut menggambarkan pegas fisik yang sama.
Keuntungan besar dari pegas adalah interupsi. Jika pengguna mengetuk lagi atau gerakan menyeret berakhir di tengah animasi, pegas baru akan dimulai dari posisi dan kecepatan saat ini, sehingga tidak ada lompatan. Untuk gestur seret, teruskan kecepatan gestur saat pengguna melepaskannya, sehingga elemen terus bergerak sesuai arah pelemparannya.
Jika komponen yang sama juga perlu dijalankan di web atau Android, mempertahankan nilai pegas sebagai token gerakan bersama akan membantu. ExodeUI yang kami buat memiliki runtime SwiftUI, sehingga satu komponen yang dirancang dengan pegasnya dapat diputar di SwiftUI dan di platform lain.