【问题标题】:Swift Run An NSTimer AutomaticallySwift 自动运行一个 NSTimer
【发布时间】:2016-05-20 23:12:07
【问题描述】:

我正在制作一个应用程序并使用 NSTimer 在我的应用程序中制作计时器。但是我需要 NSTimer 在场景开始时运行。我的应用程序中有两个场景一个主屏幕,而它本身的应用程序是我的代码viewcontroller.swift(第二个场景第一个场景是空的)顺便说一句,这是我使用 swift 的第 3 天,我在中学;)。

 import UIKit
 var Number = 2
 var Answer = Number * 2
 var score = 0
var scorelabel = "Score: "
var Timer = NSTimer()
var Counter = 10

class SecondViewController: UIViewController {


@IBOutlet weak var RightAndWrongLabel: UILabel!

@IBOutlet weak var TimerLabel: UILabel!
@IBOutlet weak var RightAndWrong: UIImageView!
@IBOutlet weak var ScoreIabel: UILabel!
@IBOutlet weak var UserInputAnswer: UITextField!
@IBOutlet weak var Question: UILabel!
@IBOutlet weak var TimerOut: UIImageView!

var seconds = 0
var timeison = true







@IBAction func ConfirmAnswer(sender: AnyObject) {
    let UserAnswer = Int(UserInputAnswer.text!)
    if UserAnswer == Answer {
        print("Your right")
        Number += 2
        score += 1
        ScoreIabel.text = "Score: \(score)"
        Question.text = "\(Number) x 2"
        UserInputAnswer.text = ""
        Answer = Number * 2
        RightAndWrong.image = UIImage(named: "Label")
        RightAndWrongLabel.hidden = false
        RightAndWrongLabel.text = "Right!"
        RightAndWrongLabel.textColor  = UIColor(red: 0, green: 225, blue: 0, alpha: 1)

    } else {
        UserInputAnswer.text  = ""
        RightAndWrong.image = UIImage(named: "Label")
        RightAndWrongLabel.hidden = false
        RightAndWrongLabel.text = "Wrong!"
        RightAndWrongLabel.textColor = UIColor(red: 225, green: 0, blue: 0, alpha: 1)



    }



}

func DisplayTimer() {
    Timer = NSTimer.scheduledTimerWithTimeInterval(1, target:self, selector: Selector("updateCounter"), userInfo: nil, repeats: true)
}


func updateTimer(){
    TimerLabel.text = String(Counter--)
}
override func viewDidLoad() {
    super.viewDidLoad()
    UserInputAnswer.keyboardType = UIKeyboardType.NumberPad
    RightAndWrongLabel.hidden = true

    // Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    3
    // Dispose of any resources that can be recreated.
}


/*
// MARK: - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    // Get the new view controller using segue.destinationViewController.
    // Pass the selected object to the new view controller.
}
*/

}

【问题讨论】:

    标签: ios swift nstimer


    【解决方案1】:

    Swift 2.x:

    func DisplayTimer() {
        Timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target:self, selector: #selector(updateTimer), userInfo: nil, repeats: true)
    }
    
    func updateTimer() {
        if Counter != 0 {  TimerLabel.text = "\(Counter -= 1)" 
        } else { 
            Timer.invalidate() 
            // call a game over method here... 
        }
     }
    
    override func viewDidLoad() {
        super.viewDidLoad()
       ... 
    
         // start the timer when this controller shows up
         DisplayTimer()
         TimerLabel.text = "\(Counter)" 
    
        ... 
       }
    

    【讨论】:

      【解决方案2】:

      如果您想在场景加载时启动计时器,请调用 DisplayTimer() override func viewDidLoad() 加载视图时

      此外,如果您想每秒更新一次标签,则 NSTimer 中的选择器调用 updateCounter 而不是 updateTimer

      【讨论】:

      • 当 var counter == 0 时,我使用 timer.invalidate() 修复了错误
      • timer.invalidate 删除一个已经存在的定时器。我以为你想在场景加载时启动计时器??
      • 我让用户先回答问题,然后计时器开始计时。(这是一个适用于 7 - 12 岁儿童的应用程序)。但这没关系,因为我是 12 XD跨度>
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-08
      • 1970-01-01
      • 1970-01-01
      • 2011-01-06
      • 2013-07-16
      • 1970-01-01
      相关资源
      最近更新 更多