按下按钮时,我试图让标签倒计时,以(小时,分钟,秒)方式显示倒计时。我试图连接我发现的两个不同的代码。这就是我所拥有的:
*updated code (some psuedo code)*
var timer = NSTimer()
func timerResults() {
let theDate = NSDate()
var endTime = theDate //+ 6 hours
let timeLeft = endTime - theDate
timeLeftLabel.text = "\(timeLeft)"
}
@IBOutlet weak var timeLeftLabel: UILabel!
@IBAction func IBbtnUpdateTap(sender: UIButton){
timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("timerResults"), userInfo: nil, repeats: true)
}
另外,即使应用程序未运行,如何才能主动进行此倒计时?基本上,如果用户在6小时内回来,我就会创建一个奖励系统。
答案 0 :(得分:3)
我现在不能给出一个很长的答案,但最简单的方法如下:
当用户以一定的秒数启动计时器时,计算计时器应该结束的确切日期(end time = now + amount of seconds
)。现在,您可以使用计算的剩余时间(time left = end time - now
)更新每次显示刷新的标签。
通过这种方式可以确保将时间保留在应用程序重新启动上(当然您需要使用NSUserDefaults
或其他内容保存结束日期)并且还可以保证计时器速度没有波动(NSTimer
不会'保证)
答案 1 :(得分:2)
您遗失或需要更正的项目如下:
var startTime: NSDate = NSDate()
var endTime: NSDate?
func viewDidLoad() {
let clock = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "countdown", userInfo: nil, repeats: true)
endTime = startTime.dateByAddingTimeInterval(21600)
}
func countdown() {
printSecondsToHoursMinutesSeconds(Int(timeLeft()))
}
func timeLeft() -> Double {
return endTime!.timeIntervalSinceNow
}
要衡量应用未运行的时间,需要节省应用进入后台的时间,然后比较再次打开应用时节省的时间。时间可以保存为NSDate
。两个NSDates
之间的比较可以为您提供NSTimeInterval
,即两个日期之间经过的秒数。例如:
let remainingTime = savedTime.timeIntervalSinceNow
请在您的应用代理中查看applicationDidBecomeActive:
和applicationDidEnterBackground:
,以便比较并将日期保存到NSUserDefaults。