如何在Swift中设置计时器

时间:2016-05-09 04:33:07

标签: swift timer nsdate

我正在努力找出跟踪我制作的计时器的最佳方法。我希望计时器在应用程序未打开时工作。

我可以说我在psuedo代码中的想法,但我不知道Swift能够实现它。按下startStopButton时,我可能想设置一个NSDate。然后,每一秒,我都希望将新的NSDate与原始NSDate进行比较,以确定已经过了多少秒。这样,如果用户离开应用程序并返回,它只会检查原始时间戳并将其与当前时间戳进行比较。然后,我将这个秒数放入一个我已经设置的变量中,以操纵我想要的方式。这是我到目前为止所做的:

var timer = NSTimer()
var second = 00.0


    func timerResults() {

    second += 1        


    let secondInIntForm = Int(second)

    let (h,m,s) = secondsToHoursMinutesSeconds(secondInIntForm)

}

    @IBAction func startStopButton(sender: AnyObject) {

    date = NSDate()

    moneyEverySecond = (people*wage)/3600

    if updatingSymbol.hidden == true { //Start the timer
        sender.setTitle("STOP", forState: UIControlState.Normal)
        updatingSymbol.hidden = false

        timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("timerResults"), userInfo: nil, repeats: true)

    } else { //Stop the timer
        sender.setTitle("START", forState: UIControlState.Normal)
        updatingSymbol.hidden = true
        //***stop the timer
        timer.invalidate()
    }
}

如果有人可以提供帮助,那就太棒了。

1 个答案:

答案 0 :(得分:1)

通过userInfo参数传递计时器的开始时间:

@IBAction func startStopButton(sender : AnyObject) {
    timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: #selector(ViewController.timerResults(_:)) , userInfo: NSDate(), repeats: true)
}

func timerResults(timer: NSTimer) {
    let timerStartDate = timer.userInfo as! NSDate
    let seconds = Int(NSDate().timeIntervalSinceDate(timerStartDate))
    print(seconds)
}

(我删除了部分功能,因为它们与问题无关)