我有一个标签,我想在其中显示系统时间。我希望我的标签与它同步,即标签将始终显示与状态栏中显示的时间相同的时间。
我使用此代码段将标签文本设置为系统时间:
let date = NSDate()
let formatter = NSDateFormatter()
formatter.dateFormat = "hh:mm"
label.text = formatter.stringFromDate(date)
但我不知道何时运行此代码。我想我每分钟都可以运行它,但这并不总能奏效。考虑一下:
用户在系统时间08:00:30启动应用程序,运行上述代码。状态栏中显示的时间和标签中显示的时间相同:08:00
在系统时间08:01:00,状态栏中显示的时间变为08:01。但是,自应用程序启动以来尚未过去1分钟,标签的文字仍然是08:00。
这就是为什么我说每分钟都这样做并不总是有效。
我还考虑过每隔一秒或几毫秒使用NSTimer
运行该代码。但是,这不是太过分,会导致性能问题吗?
是否有适当的"这样做的方法?
答案 0 :(得分:3)
你可以按照你的说法每分钟调用你的功能,但是第一次你可以在30秒后运行它(系统时间是08:00:30)然后在1分钟后继续呼叫,在这种情况下我认为他们会是相同的
答案 1 :(得分:0)
你可以使用NSTimer
每60秒刷新一次。此外,对于第一次刷新案例,你可以记录经过的秒数,然后将间隔设置为剩余的第二次
代码可能如下:
func refreshTime(firstRefresh: Bool) {
let date = NSDate()
let formatter = NSDateFormatter()
formatter.dateFormat = "hh:mm"
let time = formatter.stringFromDate(date)
print(time)
var interval = 60.0
if firstRefresh{
let formatter_second = NSDateFormatter()
formatter_second.dateFormat = "ss"
let second = formatter_second.stringFromDate(date)
interval = 60 - Double(second)!
}
let _ = NSTimer.scheduledTimerWithTimeInterval(interval, target: self, selector: #selector(GameScene.refreshTime(_:)), userInfo: false, repeats: false)
}