状态驱动的动效

SwiftUI 的动画不是手动补间,而是状态变了、界面自动补间。你只改一个状态值,系统把前后两帧之间的过渡给你做出来。这种声明式动效比手动写动画省心得多。

在 SwiftUI 里,动画是状态变化的自然结果,不是额外写的一段。

这篇把动画与自定义布局讲清楚。

隐式动画

用 animation 修饰符,让某个状态的变化自动带动画。不需要你一帧帧去算中间值,只要声明哪些状态想被动画接管,过渡就自动顺滑地补出来。

动画速查
  • 隐式修饰符自动带动画。
  • 显式withAnimation 包一段。
  • Layout自己定子视图怎么排。

显式动画与过渡

withAnimation 把一次状态变更包起来,专门给它配动画。

withAnimation(.spring()) {
  expanded.toggle()
}

出现和消失的过渡用 transition 单独定义。

弹簧与节奏

弹簧动画让动效有物理感,不是匀速死板地动。调阻尼和刚度,能做出干脆或柔和的不同手感。

苹果 SwiftUI 动画:圆角界面卡片带平滑渐变运动轨迹与弹簧动效光带旁为自定义布局网格的蓝调插画
弹簧轨迹:动效有物理感。