隐式动画与显式动画
针对不同使用场景,学习使用 .animation() 修饰器与 withAnimation {} 代码块。
隐式动画与显式动画 是 CoddyKit 上的免费 Swift Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Swift Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Swift Academy 课程共包含 4 节课。
两种动画样式
SwiftUI 支持隐式动画(.animation修饰器)和显式动画(withAnimation闭包)。
struct Demo: View {
@State private var scale = 1.0
var body: some View {
Circle().scaleEffect(scale)
}
}使用 .animation 的隐式动画
将.animation(_:value:)附加到视图后,每当绑定值发生变化,视图就会执行动画。
Circle()
.scaleEffect(scale)
.animation(.easeInOut(duration: 0.3), value: scale)触发隐式动画
任何会影响视图的状态变化,都会自动触发为该视图定义的隐式动画。
Button("Grow") {
scale = 2.0 // .animation fires automatically
}使用 withAnimation 的显式动画
withAnimation会包装一次状态变更,并同时为由此产生的所有视图变化执行动画。
Button("Animate") {
withAnimation(.spring()) {
scale = 2.0
offset = 50
}
}为多个属性添加动画
当您希望将多个状态变化作为一个事务同步执行动画时,withAnimation更加合适。
withAnimation(.easeOut(duration: 0.5)) {
isExpanded = true
rotation = 90
opacity = 0.5
}动画类型
Swift 提供 spring、easeIn、easeOut、easeInOut、linear 和自定义时序曲线动画。
.spring(response: 0.4, dampingFraction: 0.6)
.easeInOut(duration: 0.3)
.linear(duration: 0.5)
.timingCurve(0.2, 0.8, 0.2, 1.0, duration: 0.4)禁用动画
传入.animation(.none, value:),或将状态变更包装在withAnimation(nil)中,即可有选择地禁用动画。
Circle()
.scaleEffect(scale)
.animation(.none, value: scale) // no animation动画优先级
显式的withAnimation优先于子视图上的隐式.animation修饰器。
withAnimation(.linear) {
value = true // linear wins over any .animation on subviews
}重复动画
使用.repeatForever或.repeatCount实现循环动画,例如脉冲效果。
.animation(
.easeInOut(duration: 0.8).repeatForever(autoreverses: true),
value: pulsing
)延迟与速度
可以在动画值上使用.delay和.speed修饰器组合动画。
.animation(.spring().delay(0.2).speed(1.5), value: flag)选择隐式动画还是显式动画
对于绑定到单个值的单视图动画,请使用隐式动画;需要协调多个属性或视图时,请使用显式动画。
// Implicit: simple, single view
.animation(.easeIn, value: isVisible)
// Explicit: multi-property or cross-view
withAnimation { a = 1; b = 2 }快速检查
哪种方式最适合同时协调多个状态属性的动画?
课程回顾
隐式动画(.animation(_:value:))会自动响应单个视图上的值变化。显式动画(withAnimation {})可以协调多个状态变更。组合使用 .delay、.speed 和 .repeatForever 可实现复杂效果。
常见问题解答
「隐式动画与显式动画」课时是免费的吗?
是的 — 「隐式动画与显式动画」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Swift Academy 课程的其余内容,请升级到 CoddyKit PRO。 Swift Academy 课程共包含 4 节课。
「隐式动画与显式动画」这节课中我会学到什么?
针对不同使用场景,学习使用 .animation() 修饰器与 withAnimation {} 代码块。 你通过在浏览器中直接运行的动手代码来练习 Swift Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Swift Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Swift Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「隐式动画与显式动画」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Swift Academy 课中编写并运行代码吗?
能。每节 Swift Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 隐式动画与显式动画
- 使用 matchedGeometryEffect 实现英雄转场
- 自定义 AnimatableModifier 与 Animatable
- TimelineView 与 Canvas 高性能绘制