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

SwiftUI:动态调整风扇旋转动画速度问题求助

解决SwiftUI风扇动画实时调速问题

你的问题根源在于:当前代码中,动画仅在isOn状态切换时才会重新应用,而speed变化时,由于旋转目标值(360度)未改变,SwiftUI不会自动更新正在运行的动画参数。要实现实时调速,需要在speed变化时主动更新动画配置。

下面是修改后的代码,核心思路是通过跟踪当前旋转角度,在speed或isOn变化时,重新启动对应速度的无限旋转动画:

struct ContentView: View {
    @State private var isOn = false
    @State private var speed = 0.5
    @State private var rotationAngle = 0.0 // 跟踪当前旋转角度

    var body: some View {
        VStack{
            Spacer()
            Image("fan")
                .rotationEffect(Angle(degrees: rotationAngle))
                .onAppear {
                    startFanAnimation()
                }
                .onChange(of: isOn) { _ in
                    if isOn {
                        startFanAnimation()
                    } else {
                        rotationAngle = 0.0 // 停止时重置角度
                    }
                }
                .onChange(of: speed) { _ in
                    if isOn {
                        startFanAnimation() // 调速时重启动画
                    }
                }

            Spacer()
            HStack{
                Button("+"){
                    speed += 0.3
                }
                Button("-"){
                    speed -= 0.3
                }
            }
            Spacer()
            Toggle(isOn: $isOn){
            }
            .labelsHidden()
            Text("\(String(format: "%.1f", speed))") // 优化显示格式
            Spacer()
        }
    }

    // 封装启动风扇动画的逻辑
    private func startFanAnimation() {
        // 先保留当前角度的余数,避免每次重启都跳回0度
        rotationAngle = rotationAngle.truncatingRemainder(dividingBy: 360)
        withAnimation(Animation.linear.repeatForever(autoreverses: false).speed(speed)) {
            rotationAngle += 360
        }
    }
}

关键改动说明:

  • 新增rotationAngle状态变量跟踪当前旋转角度,避免调速或启停时出现角度跳变
  • 封装startFanAnimation()方法统一处理动画启动逻辑,在onAppear、isOn变化、speed变化时调用
  • 每次启动动画前,将当前角度取模360,保证动画从当前位置继续旋转,过渡更自然
  • 优化速度显示格式,避免过多小数位

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 03:31:26