Skip to content

使用 PhaseAnimator 创建多阶段动画 (iOS 17+)

探索 PhaseAnimator 的奇妙世界 🚀

准备好迎接 SwiftUI 动画的新纪元了吗?在 iOS 17+ 中,PhaseAnimator 就像一位魔术师,让你可以轻松创建多阶段动画!它允许你定义一系列动画状态(phases),视图会在这些状态之间平滑过渡。是不是很酷?😎

PhaseAnimator 的核心在于它能够根据你定义的阶段序列,自动管理动画的进度。这意味着你可以将复杂的动画分解为更小、更易于管理的部分。例如,你可以创建一个动画,让一个视图先放大,然后旋转,最后淡出。每个动作都是一个独立的阶段,PhaseAnimator 会负责协调它们之间的切换。

如何使用 PhaseAnimator 🎨

使用 PhaseAnimator 非常简单!首先,你需要定义一个枚举或数组,来表示你的动画阶段。然后,将这个枚举或数组传递给 PhaseAnimator 初始化器。在视图的闭包中,你可以根据当前的阶段来修改视图的外观。

swift
enum LoadingState {
    case initial, loading, success, failure
}

struct ContentView: View {
    @State private var loadingState: LoadingState = .initial

    var body: some View {
        RoundedRectangle(cornerRadius: 25.0)
            .fill(.blue)
            .frame(width: 200, height: 200)
            .overlay {
                switch loadingState {
                case .initial:
                    Text("点击加载")
                case .loading:
                    ProgressView()
                case .success:
                    Text("加载成功! ✅")
                case .failure:
                    Text("加载失败! ❌")
                }
            }
            .phaseAnimator([false, true]) { view, phase in
                view
                    .scaleEffect(phase ? 1.2 : 1)
                    .opacity(phase ? 0.5 : 1)
            } animation: { phase in
                switch phase {
                case true:
                    .easeInOut(duration: 0.3)
                case false:
                    .easeInOut(duration: 0.7)
                }
            }
            .onTapGesture {
                loadingState = .loading
                // 模拟异步加载
                DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
                    loadingState = .success
                }
            }
    }
}

在这个例子中,我们定义了一个 LoadingState 枚举,它有四个状态:initialloadingsuccessfailure。我们使用 phaseAnimator 来创建一个动画,当 phasetrue 时,视图会放大并降低透明度;当 phasefalse 时,视图会恢复原状。

PhaseAnimator 的优势 ✨

  • 简化复杂动画:将动画分解为多个阶段,使代码更易于理解和维护。
  • 灵活的动画控制:可以为每个阶段定义不同的动画效果和持续时间。
  • 状态驱动:动画状态与应用程序状态同步,确保动画始终与用户界面保持一致。

进阶技巧 🚀

  • 使用不同的动画曲线:尝试使用不同的动画曲线(例如 easeInOutlinear)来获得不同的动画效果。
  • 组合多个动画:在一个 PhaseAnimator 中组合多个动画,创建更复杂的动画效果。
  • 使用 withAnimation:在 PhaseAnimator 的闭包中使用 withAnimation 来覆盖默认的动画效果。

PhaseAnimator 是一个强大的工具,可以帮助你创建令人惊叹的 SwiftUI 动画。现在就开始尝试吧,让你的应用程序焕发生机!🎉

本站使用 VitePress 制作