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
相关产品推荐
相关产品推荐

