如何将我的UILabel与系统时间同步?

时间:2016-09-01 07:11:37

标签: ios swift time

我有一个标签,我想在其中显示系统时间。我希望我的标签与它同步,即标签将始终显示与状态栏中显示的时间相同的时间。

我使用此代码段将标签文本设置为系统时间:

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运行该代码。但是,这不是太过分,会导致性能问题吗?

是否有适当的"这样做的方法?

2 个答案:

答案 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)

}