我正在努力找出跟踪我制作的计时器的最佳方法。我希望计时器在应用程序未打开时工作。
我可以说我在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()
}
}
如果有人可以提供帮助,那就太棒了。
答案 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)
}
(我删除了部分功能,因为它们与问题无关)