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

求助:如何在SwiftUI中实现数字文本的滑动动画效果?

SwiftUI实现数字逐个滑入动画

你当前的代码是对整个Text视图应用transition(.slide),修改字符串时会触发整个文本块的滑动,无法实现预期的单个数字从上方滑入效果。下面是匹配需求的实现方案:

核心思路

  • 将数字拆分为单个字符,每个字符对应独立的Text视图
  • 为新增的数字视图单独设置从上方滑入的过渡动画
  • 通过数组管理数字序列,用withAnimation包裹数据更新触发动画

完整代码

struct AnimatedText: View {
    @State var digits: [String] = ["2", "3", "4"]
    
    var body: some View {
        VStack {
            HStack(spacing: 2) {
                Spacer()
                ForEach(digits, id: \.self) { digit in
                    Text(digit)
                        .font(.title)
                        .transition(.move(edge: .top).combined(with: .opacity))
                }
            }
            .padding(20)
            
            Button("Add Number") {
                withAnimation(.spring(response: 0.5, dampingFraction: 0.7)) {
                    digits.append(String(Int.random(in: 0..<9)))
                }
            }
        }
    }
}

代码说明

  1. 拆分数字序列:用数组digits替代原字符串,每个元素对应单个数字,确保能独立控制每个数字的视图
  2. 定制过渡动画:给每个数字Text添加.move(edge: .top)+.opacity的组合过渡,实现新数字从上方滑入并淡显的效果,匹配预期动画
  3. 优化动画参数:调整spring动画的响应时间和阻尼系数,让滑动的弹性效果更贴近需求
  4. 布局细节调整:HStack设置spacing: 2,让数字间距更紧凑,还原目标视觉效果

效果验证

点击按钮时,新数字会从上方滑入并淡显,已有数字保持位置不变,完全符合你想要的动画表现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 10:31:07