SwiftUI는 상태 변화를 애니메이션으로 보여줍니다. withAnimation(.spring) 내에서 isExpanded와 같은 값이 변경되면 이에 의존하는 모든 뷰는 스프링을 사용하여 새로운 레이아웃으로 이동합니다.
iOS 17 이상에서 스프링을 설명하는 가장 간단한 방법은 두 가지 값, 즉 지속 시간(정착하는 데 걸리는 대략적인 시간)과 바운스(오버슛되는 정도)를 사용하는 것입니다. 바운스가 0이면 오버슈트 없이 부드러운 모션이 제공됩니다. 값이 높을수록 바운스가 추가됩니다. Apple은 또한 .smooth, .snappy 및 .bouncy와 같은 사전 설정을 제공합니다.
이전 코드는 .spring(response:dampingFraction:)을 사용합니다. 응답은 기간과 유사하며 감쇠 비율이 1이면 바운스가 없음을 의미하고 값이 낮을수록 바운스가 추가됨을 의미합니다. 두 형태 모두 동일한 물리적 스프링을 설명합니다.
스프링의 가장 큰 장점은 단속입니다. 사용자가 다시 탭하거나 드래그 동작이 애니메이션 중간에 종료되면 새 스프링이 현재 위치와 속도에서 시작되므로 점프가 없습니다. 드래그 동작의 경우 사용자가 놓을 때 동작의 속도를 전달하여 요소가 던져진 방향으로 계속되도록 합니다.
동일한 구성 요소를 웹이나 Android에서도 실행해야 하는 경우 스프링 값을 공유 모션 토큰으로 유지하는 것이 도움이 됩니다. 우리가 만드는 ExodeUI에는 SwiftUI 런타임이 있으므로 스프링이 포함된 하나의 설계된 구성 요소가 SwiftUI 및 기타 플랫폼에서 작동할 수 있습니다.