【发布时间】: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() 两次。保存前请仔细检查您的帖子。