ios - 计时器问题呈现时间

标签 ios swift timer dateformatter

我正在尝试用当前时间更新标签。

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var label: UILabel!
    let date = Date()

    override func viewDidLoad() {
        super.viewDidLoad()

        Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(updateTime), userInfo: nil, repeats: true)
    }


    func updateTime(){

        label.text = DateFormatter.localizedString(from: Date(), dateStyle: .none, timeStyle: .long)

    }


}

当我使用 updateTime() label.text = DateFormatter.localizedString(from: Date(), dateStyle: .none, timeStyle: .long) 我正在得到我想要的结果

当我使用 label.text = DateFormatter.localizedString(from: date, dateStyle: .none, timeStyle: .long)

计时器不工作。有人可以解释一下吗? ?

据我了解,如果我使用日期而不是 Date(),那么我需要一个计时器/计数器来计数和计算。如果有,有什么建议吗?

非常感谢

P

最佳答案

在您的第二个示例中,date 是一个常量值。因此,即使每秒调用一次 updateTime(),它每次都会将标签设置为相同的值。

从评论来看,您似乎希望能够在计时器运行时提前一个恒定时间。

要从任意常数 Date 开始计数,请在计时器启动时存储一个开始 时间。使用它来计算计时器运行的间隔,然后使用该间隔提前日期:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var label: UILabel!
    let date = Date()
    var start: Date?

    override func viewDidLoad() {
        super.viewDidLoad()

        // Save the time when the timer starts 
        start = Date()

        Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(updateTime), userInfo: nil, repeats: true)
    }


    func updateTime(){

        // compute how long the timer has been running
        let interval = Date().timeIntervalSince(start!)

        // compute new date based on how long the timer has been running
        let newDate = date.addingTimeInterval(interval)
        label.text = DateFormatter.localizedString(from: newDate, dateStyle: .none, timeStyle: .long)

    }
}

计时器触发不是很准确,您可能会看到计数暂停一秒然后跳转 2 秒。如果您将计时器间隔设置得更小,例如 0.1,则可以避免视觉故障。

关于ios - 计时器问题呈现时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45526500/

相关文章:

ios - UICollectionView cellForItemAt : won't be called while layoutAttributesForElements are returning values

ios - Facebook 的登录打开错误的应用程序

multithreading - Perl 中的线程定时循环

iphone - 适用于 iOS 的 RTSP 视频流

ios - ScrollView 内的 SwiftUI 文本,无法在两个轴上滚动

iOS swift : Adding or Moving NavigationBar to bottom of the view controller

ios - 我真的需要单例上的共享实例吗?

swift - 使用计时器在后台刷新应用程序

java - Timer + gregorianCalendar.getTime() 未正确刷新日期

c++ Floodfill算法在Xcode中崩溃