SwiftUI anima mudanças de estado. Quando um valor como isExpanded muda dentro de withAnimation(.spring), cada visualização que depende dele se move para seu novo layout usando uma mola.
No iOS 17 e posterior, a maneira mais simples de descrever uma mola é com dois valores: duração, aproximadamente quanto tempo leva para estabilizar, e salto, quanto ela ultrapassa. Um salto de 0 proporciona um movimento suave sem ultrapassagem; valores mais altos adicionam salto. A Apple também oferece predefinições: .smooth, .snappy e .bouncy.
O código mais antigo usa .spring(response:dampingFraction:). A resposta é semelhante à duração, e uma fração de amortecimento de 1 significa que não há salto, enquanto valores mais baixos adicionam salto. Ambas as formas descrevem a mesma mola física.
A grande vantagem das molas é a interrupção. Se um usuário tocar novamente ou um gesto de arrastar terminar no meio da animação, a nova mola começará a partir da posição e velocidade atuais, portanto não haverá salto. Para gestos de arrastar, passe a velocidade do gesto quando o usuário soltar, para que o elemento continue na direção em que foi lançado.
Se o mesmo componente também precisar ser executado na web ou no Android, manter os valores de primavera como tokens de movimento compartilhados ajuda. O ExodeUI, que fabricamos, tem um tempo de execução SwiftUI, portanto, um componente projetado com suas molas pode funcionar no SwiftUI e em outras plataformas.