【问题标题】:Where to place countdown timer code?在哪里放置倒数计时器代码?
【发布时间】:2017-07-23 20:53:50
【问题描述】:

我正在开发一个 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()
    }

【问题讨论】:

    标签: ios swift timer countdown


    【解决方案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
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-31
      • 2015-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      相关资源
      最近更新 更多