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

如何验证UIActivityIndicatorView在应用流畅运行时的转动状态?代码存疑

解决UIActivityIndicatorView无法观测的问题

嘿,我完全懂你的烦恼——当代码执行速度太快时,确实没法直观确认加载指示器的逻辑是否正常工作。咱们一步步来排查和验证:

首先,先修正你混乱的代码结构

你给出的代码存在语法不完整的问题(比如nextQuestion里的if语句没有闭合),先整理成可运行的正确版本:

@IBOutlet weak var questionLabel: UILabel!
@IBOutlet weak var scoreLabel: UILabel!
@IBOutlet var progressBar: UIView!
@IBOutlet weak var progressLabel: UILabel!
@IBOutlet weak var loadingIndicator: UIActivityIndicatorView!

// 假设你有这两个全局变量
var questionNumber = 0
var score = 0

override func viewDidLoad() {
    super.viewDidLoad()
    // 注意:UIActivityIndicatorView默认hidesWhenStopped是true(停止动画时自动隐藏)
    // 你的toggle()会把它改成false,这意味着停止后指示器依然显示,可能不是你想要的
    loadingIndicator.hidesWhenStopped = true 
    nextQuestion()
}

func startOver() {
    loadingIndicator.startAnimating()
    questionNumber = 0
    score = 0
    
    // 模拟加载延迟,让你能看到指示器转动
    DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
        self.nextQuestion()
    }
}

func nextQuestion() {
    updateUI()
    loadingIndicator.stopAnimating()
    
    if questionNumber <= 12 {
        // 这里补充你加载下一题的逻辑,比如从数据源获取题目文本
        // questionLabel.text = yourQuestionArray[questionNumber].content
        questionNumber += 1
    } else {
        // 所有题目完成后的逻辑,比如显示结束提示
    }
}

func updateUI() {
    scoreLabel.text = "Score: \(score)"
    progressBar.frame.size.width = (view.frame.size.width / 13) * CGFloat(questionNumber)
    // 可选:更新进度标签,让用户看到当前进度
    progressLabel.text = "\(questionNumber)/13"
}

验证代码正确性的实用技巧

  1. 添加模拟延迟
    我在startOver里加了2秒的延迟,这样调用nextQuestion前,指示器会持续转动2秒,你就能直观看到它是否正常工作。等确认逻辑没问题后,再把延迟去掉即可。

  2. 检查hidesWhenStopped属性
    默认这个属性是true,也就是停止动画时指示器自动隐藏。你原来的toggle()会把它改成false,这会导致即使停止动画,指示器依然显示在界面上,这大概率不符合你的需求,建议显式设置为true。

  3. 用调试断点确认状态
    在loadingIndicator.startAnimating()和loadingIndicator.stopAnimating()这两行打断点,运行时查看loadingIndicator.isAnimating属性的值,确认动画状态是否正确切换,同时也能检查loadingIndicator是否为nil(排除IBOutlet未正确连接的问题)。

  4. 手动测试指示器显示
    可以在viewDidLoad里临时添加loadingIndicator.startAnimating(),然后注释掉nextQuestion()里的stopAnimating(),运行后看看指示器是否正常显示,以此排除控件本身的连接或样式问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:04:32