Где разместить код таймера обратного отсчета?
Я разрабатываю приложение для викторины iOS, и каждый раз, когда задают вопрос, я хочу запустить таймер обратного отсчета в 15 секунд. Если пользователь не ответит на вопрос к тому времени, когда счетчик достигнет нуля, ответ считается неверным. Мой вопрос: где бы я разместил код таймера обратного отсчета, чтобы каждый раз, когда задавался вопрос, он давал пользователю 15 секунд ответа? Я также хочу, чтобы это время сбрасывалось каждый раз, когда задают новый вопрос.
Мой код:
class ViewController: UIViewController {
//countdown timer
@IBOutlet weak var questionTimer: UILabel!
func randomQuestion() {
//random question
if questionList.isEmpty {
questionList = Array(QADictionary.keys)
}
let rand = Int(arc4random_uniform(UInt32(questionList.count)))
questionLabel.text = questionList[rand]
//matching answer values to go with question keys
var choices = QADictionary[questionList[rand]]!
questionList.remove(at: rand)
//create button
var button:UIButton = UIButton()
//variables
var x = 1
rightAnswerBox = arc4random_uniform(4)+1
for index in 1...4
{
button = view.viewWithTag(index) as! UIButton
if (index == Int(rightAnswerBox))
{
button.setTitle(choices[0], for: .normal)
}
else {
button.setTitle(choices[x], for: .normal)
x += 1
}
randomImage()
}
}
let QADictionary = ["Who is Thor's brother?" : ["Atum", "Loki", "Red Norvell", "Kevin Masterson"], "What is the name of Thor's hammer?" : ["Mjolinr", "Uru", "Stormbreaker", "Thundara"], "Who is the father of Thor?" : ["Odin", "Sif", "Heimdall", "Balder"]]
//wrong view segue
func wrongSeg() {
performSegue(withIdentifier: "wrongViewSegue", sender: self)
}
//proceed screen
func rightSeg() {
performSegue(withIdentifier: "rightSeg", sender: self)
}
//variables
var rightAnswerBox:UInt32 = 0
var index = 0
//Question Label
@IBOutlet weak var questionLabel: UILabel!
//Answer Button
@IBAction func buttonAction(_ sender: AnyObject) {
if (sender.tag == Int(rightAnswerBox))
{
print ("Correct!")
}
else if (sender.tag != Int(rightAnswerBox)) {
wrongSeg()
print ("Wrong!")
questionList = []
}
randomQuestion()
}
override func viewDidAppear(_ animated: Bool)
{
randomQuestion()
}
//variables
var seconds = 15
var timer = Timer()
override func viewDidLoad() {
super.viewDidLoad()
}
1 ответ
Это должно дать вам некоторые основные строительные блоки для построения вашего решения.
// Timer property
var timer: Timer?
// Call this when a new question is loaded
func startTimer() {
self.timer?.invalidate()
self.timer = Timer.scheduledTimer(withTimeInterval: 15.0,
repeats: false,
block: { timer in
// Put whatever code should happen if the user does not answer the question in time.
})
RunLoop.main.add(timer,
forMode: .commonModes)
}
// Call this when a question has been answered
func questionAnswered() {
self.timer?.invalidate()
// Put whatever should happen if a question was answered in time here
}