SwiftUI анимира промени в състоянието. Когато стойност като isExpanded се промени вътре с Animation(.spring), всеки изглед, който зависи от нея, се премества към новото си оформление с помощта на пружина.
В iOS 17 и по-нови версии най-простият начин да се опише пружина е с две стойности: продължителност, приблизително колко време отнема да се установи, и отскачане, колко превишава. Отскок от 0 дава плавно движение без превишаване; по-високите стойности добавят отскок. Apple също предоставя предварително зададени настройки: .smooth, .nappy и .bouncy.
По-старият код използва .spring(response:dampingFraction:). Реакцията е подобна на продължителността и затихваща част от 1 означава липса на отскачане, докато по-ниските стойности добавят отскачане. И двете форми описват една и съща физическа пружина.
Голямото предимство на пружините е прекъсването. Ако потребител докосне отново или жест с плъзгане сложи край на анимацията, новата пружина започва от текущата позиция и скорост, така че няма скок. За жестове с плъзгане предайте скоростта на жеста, когато потребителят пусне, така че елементът да продължи в посоката, в която е бил хвърлен.
Ако същият компонент също трябва да работи в мрежата или Android, запазването на пружинните стойности като споделени токени за движение помага. ExodeUI, който правим, има време за изпълнение SwiftUI, така че един проектиран компонент със своите пружини може да играе в SwiftUI и на други платформи.