【问题标题】:Swift timer not following correct intervalSwift 计时器未遵循正确的时间间隔
【发布时间】:2020-10-01 09:17:08
【问题描述】:

我正在尝试创建一个测验应用程序,当计时器到期时(即 10 秒,我希望 Timmer 有 1 秒的间隔),它会自行重置并获取下一个问题并Timmer 再次从 10 点重新开始...但我的问题是计时器在加载第一个问题时不遵循固定间隔,它显示间隔为 2 ...即 10,8,6 .. 然后是第二个问题使跳跃间隔 3 秒,同样间隔增加。

var countTime = 10.0
func handleNextQuestion() throws {
            nextQuestion()
            if questionCounter == allQuestions.list.count-1{
                finishButton.isHidden = false
                nextButton.isHidden = true
                //scoreLbl.text = "\(score)"
            }
        }
        
        func nextQuestion(){
            showResultView(isCorrect: (question?.isAnswerCorrect)!)
            questionCounter = questionCounter + 1
            question = fetchQuestion()
            setQuizView(question: question!)
            
            
        }
        
        @objc func update() {
            if(countTime > 0) {
                countTime = countTime - 1
                self.countDownLabel.text = String(countTime)
            }else{
                timer.invalidate()
                countTime = 10.0
                do{
    
                    try handleNextQuestion()
    
                }
                catch{
                       moveToResultView()
                }
                
            }
        }
     
        
       
        func startTimer() {
            timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(ViewController.update), userInfo: nil, repeats: true)
        }
        func setQuizView(question:Question)  {
            self.countDownLabel.text = "10"
          startTimer()
            startTimer()
            questionLabel.text =  question.questionText
            ansLbl1.text =  question.answer1
            ansLbl2.text =  question.answer2
            ansLbl3.text =  question.answer3
            ansLbl4.text =  question.answer4
            
            if question.selectedAnswer == Constants.DEFAULT_ANSWER {
                for checkBoxItem in checkBoxlist{
                    checkBoxItem.isChecked = false
                }
                
            }
            
        }
        

【问题讨论】:

  • 你在 setQuizView 中调用 startTimer() 两次
  • 对不起,我修改了代码,而复制粘贴删除了部分代码,所以它碰巧添加了额外的 startTimer() ,这不是原始代码的一部分。但它仍然有问题..编辑的问题
  • 谢谢@Yunnosch 你是对的,请原谅我的错误......创建一个新的
  • 每个人都在学习。你做得很好。玩得开心。
  • 这不是您的代码的一部分,但是计时器对象是如何声明的,看起来好像您有多个计时器?现在您再次调用 startTimer() 两次。保存前请仔细检查您的帖子。

标签: swift nstimer ios13


【解决方案1】:

func setQuizView(question:Question)

致电startTimer() 两次。我认为这解释了这种行为。在每个新问题上,计时器都会启动两次,但只会失效一次,因此秒数会增加一个额外的问题。

只需删除对startTimer()的调用之一

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多