想在 app 里加一个页面显示当前的系统时间,精确到秒,网上查到的资料都是推荐用 Timer 每秒触发一次更新。
struct AtomicClockView: View {
@State private var currentDate = Date.now
let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
var body: some View {
Text(currentDate.formatted(date: .omitted, time: .standard))
.font(.system(size: 50, weight: .ultraLight, design: .monospaced))
.onReceive(timer) { input in
currentDate = input
}
}
}
然后放在 TabView 里了
var body: some View {
NavigationStack {
TabView {
AtomicClockView()
.tabItem {
Label("Atomic Clock", systemImage: "clock")
}
}
}
}
在 Xcode 里预览和模拟器里看起来都一切正常,但是在手机( iPhone 14 Pro, iOS 18 )上打开之后,可以明显感到秒的文字在更新时会有上一秒的残影叠加在上面,而不是瞬间消失再渲染下一秒。而且好像是头几秒没有问题,第 3 秒左右开始出现残影。
搜索了一下好像没有人提过类似的问题,所以不知道是 SwiftUI 的问题还是代码的问题,每秒一次的频率应该不会是性能问题吧(尝试把 Timer 改成 0.1 也无法解决)。
感谢帮助。
1
hstdt 91 天前 via iPhone
可以不用 timer ,https://stackoverflow.com/a/72387797 按照这个回答吧 style 改下就可以吧
|