Ios 计时器问题显示时间
我正在尝试用当前时间更新标签Ios 计时器问题显示时间,ios,swift,timer,dateformatter,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:
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)
}
}
当我使用atupdateTime()
label.text=DateFormatter.localizedString(from:Date(),dateStyle:.none,timeStyle:.long)
时,我得到了我想要的结果
当我使用label.text=DateFormatter.localizedString时(从:日期,日期样式:。无,时间样式:。长)
计时器坏了。谁能给我解释一下吗
根据我的理解,如果我使用日期而不是日期(),那么我需要一个计时器/计数器来计数和计算。如果有的话,有什么建议吗
非常感谢
p在第二个示例中,
date
是一个常量值。因此,即使每秒调用一次updateTime(),每次都会将标签设置为相同的值
从评论来看,似乎您希望在计时器运行时能够提前一个恒定的时间
要从任意的常数
日期
开始计数,请在计时器启动时存储开始
时间。使用该值计算计时器已运行的间隔
,然后使用该间隔
提前日期
:
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
,则可以避免出现视觉故障。date
是一个常量值。因此,即使每秒调用一次updateTime()
,每次都会将标签设置为相同的值。@vacawama。非常感谢。以及我如何表示标签显示从日期开始计数以及每分钟/秒等?您是否试图使标签从0:00开始,然后每秒计数?不,基本上我希望标签从日期开始(让date=date()),然后每秒开始计数。通过解决这个小示例,我可以解决我的大示例:)像在第一个示例中那样使用Date()
调用有什么问题。你说这样行的。那你不接受的呢?