ios - 将多个时间标签与主机时间同步
问题描述
什么是更新显示从 API 收到的静态时间的标签的可能方法。我有一个tableView
显示cell
城市名称当前温度和时间的地方,就像本地 iPhone WeatherApp 一样。有没有办法观察设备时钟分钟,所以我可以触发一些代码来更新一分钟的时间?
解决方案
您可以子类化 UILabel 并向其添加计时器,以便它自动更新:
考虑到最后一个问题,您可以从 API 中获取与 GMT 的时区偏移量,您可以将 UILabel 子类化,向其添加 timeZone 属性和 didSet 闭包,以设置计时器以 60 秒的间隔在下一个偶数分钟触发并设置它重复。每次调用此方法时添加一个选择器以更新其标签:
class Clock: UILabel {
let dateFormatter = DateFormatter()
var timer = Timer()
var timeZone: Int = 0 {
didSet {
dateFormatter.timeStyle = .short
dateFormatter.timeZone = TimeZone(secondsFromGMT: timeZone)
var components = Date().components
components.minute! += 1
components.second = 0
components.nanosecond = 0
timer = .init(fireAt: components.date!, interval: 60, target: self, selector: #selector(update), userInfo: nil, repeats: true)
RunLoop.main.add(timer, forMode: .common)
update()
}
}
@objc func update(_ timer: Timer? = nil) {
text = dateFormatter.string(from: Date())
}
}
extension Date {
var components: DateComponents {
Calendar.current.dateComponents(in: .current, from: self)
}
}
现在你可以创建你的时钟标签,当你设置它的 timeZone 属性时,它会自动开始运行:
let clock: Clock = .init(frame: .init(origin: .zero,
size: .init(width: 200, height: 30)))
clock.timeZone = -14400
clock.text // "11:01 PM"
推荐阅读
- reactjs - 没有浏览器刷新,MERN 赞成/反对投票不会更新
- grep - 如何在很长的单行字符串中查找带连字符的字符串?
- ruby - SignalFx:在 Ruby 代码中报告一个已获救的异常,类似于 NewRelic::Agent.notice_error?
- spring - 如果 BindingResult 在 Spring MVC 中有错误,如何保持在同一页面
- amazon-web-services - AWS 是否有类似于 resilince4j 的选项来在特定服务关闭时合并断路器模式
- c# - 破碎的 2D 平台游戏在 Unity 中翻转
- javascript - 如何过滤对象具有另一个数组的对象数组?
- sql - 表未在单选查询中更新
- redis - 如何用玩笑模拟nestjs-redis
- java - 缩放我的 Azure 函数和 BlobTrigger