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

SwiftUI 如何实现从下往上自然漂浮的气泡动画效果

SwiftUI 气泡漂浮效果实现方案

你当前的实现仅完成了基础的垂直上下位移,缺少真实气泡漂浮时的水平随机偏移、大小微变、运动速率不均的特性,调整后的代码如下:

@State private var isAnimating = false
// 随机参数可实现多个气泡的差异化漂浮效果,无需随机可固定为定值
private let horizontalOffset: CGFloat = CGFloat.random(in: -30...30)
private let animationDuration: Double = Double.random(in: 4...6)

var body: some View {
    Image("bubble").resizable()
        .aspectRatio(contentMode: .fit)
        .frame(height: 40)
        // 水平漂移效果
        .offset(x: isAnimating ? horizontalOffset : -horizontalOffset)
        // 模拟气泡上浮时的体积微变化
        .scaleEffect(isAnimating ? 1.1 : 0.9)
        .frame(maxHeight: .infinity, alignment: isAnimating ? .top : .bottom)
        // 垂直上浮动画:开头速度快,接近顶部时放缓
        .animation(.easeOut(duration: animationDuration).repeatForever(autoreverses: false), value: isAnimating)
        // 水平偏移+缩放动画,和垂直动画错开节奏,避免运动过于机械
        .animation(.easeInOut(duration: animationDuration * 0.7).repeatForever(autoreverses: true), value: isAnimating)
        .onAppear {
            isAnimating = true
        }
}

改动说明:

  • 新增水平偏移动画,通过随机的左右位移模拟气泡上浮时受水流影响的漂移效果
  • 加入0.9~1.1倍的区间缩放,模拟气泡上浮过程中水压降低产生的体积微膨胀效果
  • 拆分动画逻辑,水平缩放动画和垂直位移动画采用不同时长,运动效果更自然
  • 内置随机参数,同时渲染多个气泡实例时会自动生成错落的漂浮节奏,不会出现完全同步的机械感

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 05:06:03