Skip to content

9.4_在 animation 闭包中配置动画

配置动画闭包 🎨

在 SwiftUI 的相位动画师(Phase Animator)中,animation 闭包是动画效果的核心!你可以在这里精确控制每个阶段的动画行为,让你的视图动起来!是不是很激动呢?🎉

动画配置选项 ⚙️

animation 闭包为你提供了丰富的动画配置选项。你可以使用 SwiftUI 提供的各种动画类型,例如:

  • .linear: 线性动画,匀速变化。
  • .easeIn: 缓入动画,开始时速度较慢,逐渐加速。
  • .easeOut: 缓出动画,结束时速度较慢,逐渐减速。
  • .easeInOut: 缓入缓出动画,开始和结束时速度较慢,中间加速。
  • .spring(): 弹簧动画,模拟物理弹簧效果。

你还可以自定义动画的持续时间、延迟等参数,让动画效果更加符合你的需求。例如,你可以使用 .animation(.easeInOut(duration: 0.5)) 创建一个持续 0.5 秒的缓入缓出动画。

动画阶段与数值关联 🔢

animation 闭包接收一个 phase 参数,它代表当前的动画阶段。你可以根据 phase 的值来配置不同的动画效果。例如,你可以让视图在第一个阶段使用线性动画,在第二个阶段使用弹簧动画。

swift
PhaseAnimator([0.0, 1.0], trigger: myTrigger) { view, phase in
    view
        .offset(x: phase * 100)
        .animation(phase == 0.0 ? .linear(duration: 0.5) : .spring())
}

在这个例子中,当 phase 为 0.0 时,视图使用线性动画水平移动 100 个像素;当 phase 为 1.0 时,视图使用弹簧动画。

实例演示 🎬

让我们通过一个简单的例子来演示如何在 animation 闭包中配置动画。假设我们想要创建一个按钮,点击后按钮会先放大,然后再缩小。

  1. 定义一个状态变量 isTapped,用于控制动画的触发。
  2. 使用 PhaseAnimator 创建一个相位动画,定义两个阶段:0.0 和 1.0。
  3. animation 闭包中,根据 phase 的值来配置按钮的缩放比例。当 phase 为 0.0 时,按钮放大;当 phase 为 1.0 时,按钮缩小。
  4. 使用 .onTapGesture 修饰符来触发动画。
swift
struct ContentView: View {
    @State private var isTapped = false

    var body: some View {
        Button("点击我") {
            isTapped.toggle()
        }
        .scaleEffect(isTapped ? 1.2 : 1.0)
        .animation(.spring(), value: isTapped)
    }
}

通过这个例子,你可以看到 animation 闭包的强大之处。你可以根据不同的动画阶段,配置不同的动画效果,创造出各种各样的动画效果。🚀

总结 📚

animation 闭包是相位动画师(Phase Animator)中非常重要的一个组成部分。通过灵活运用 animation 闭包,你可以创建出令人惊艳的 SwiftUI 动画效果。快去尝试一下吧!💪

本站使用 VitePress 制作