如何解决Swift计时器未遵循正确的间隔
我正在尝试创建一个测验应用程序,该应用程序在计时器到期时(即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
}
}
}
解决方法
func setQuizView(question:Question)
呼叫startTimer()
两次。我认为这可以解释这种行为。在每个新问题上,计时器都会启动两次,但只会使计时器失效一次,因此秒数会增加一个额外的检查问题。
只需删除对startTimer()
的呼叫之一
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。