You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI实现不对称弹跳动画:上升easeOut下落easeIn(iOS15+)

实现不对称弹跳动画(iOS15+)

需求:让圆形上升时应用easeOut动画,下落时应用easeIn动画,实现自然的连续弹跳效果,替代当前对称的自动反转动画。

现有代码问题

当前代码使用repeatForever(autoreverses: true),动画反转时会复用相同的缓动曲线,导致上下动画完全对称,无法模拟真实弹跳的物理节奏。

解决方案代码

struct JumpingCircle: View {
    @State private var isBouncing = false
    
    var body: some View {
        VStack {
            Circle()
                .frame(width: 100, height: 100)
                .offset(y: isBouncing ? -100 : 0)
                .animation(
                    // 组合不对称动画序列,循环执行且不自动反转
                    Animation.sequence([
                        .easeOut(duration: 0.5),  // 上升阶段:速度逐渐减慢
                        .easeIn(duration: 0.5)     // 下落阶段:速度逐渐加快
                    ]).repeatForever(autoreverses: false),
                    value: isBouncing
                )
            
            Button("Toggle") {
                isBouncing.toggle()
            }
        }
        .onAppear {
            isBouncing = true  // 页面加载时自动触发弹跳
        }
    }
}

#Preview {
    JumpingCircle()
}

代码说明

  • 用Animation.sequence将两个缓动动画按顺序组合,精准对应上升、下落的物理特性:上升收尾减速,下落启动加速。
  • 关闭autoreverses,让动画序列完整执行后直接重复,避免反转时复用相同曲线导致的对称效果。
  • 支持按钮手动启停,也可通过onAppear自动启动动画。

效果对比

  • 现有效果:现有效果(慢放演示)
  • 期望效果:目标弹跳效果

内容的提问来源于stack exchange,提问作者Arjan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 04:55:26