iOS 14 Text() 带天数计时器
Posted
技术标签:
【中文标题】iOS 14 Text() 带天数计时器【英文标题】:iOS 14 Text() with timer for Days 【发布时间】:2020-10-27 21:40:11 【问题描述】:我正在 ios 14 中构建一个小部件来倒计时直到事件发生的天数。我希望计时器具有天、小时、分钟和秒。到目前为止,我发现Text(someFutureDate, style: .timer)
(几乎)完美地工作。唯一的缺点是它只计算hours:minutes:seconds
。
目前,我的应用程序中的下一个事件是 79 天后,因此显示 1,915 小时并不是最用户友好的做法。有没有人有一个聪明的技巧来显示days:hours:minutes:seconds
?
【问题讨论】:
【参考方案1】:以下代码在文本中为您提供“2 天,3 小时”。
let components = DateComponents(day: 2, hour: 3, minute: 4, second: 5)
let futureDate = Calendar.current.date(byAdding: components, to: Date())!
Text(futureDate, style: .relative)
文本在任一时间仅显示两个日期组件。一旦天数降为零,标签就会变为“X 小时,Y 分钟”,而一旦小时数降为零,标签就会变为“X 分钟,Y 秒” Apple 会处理 Text 标签中的时间格式,因此您无法修改超出样式(.relative/.offset/.timer)的格式。
【讨论】:
【参考方案2】:看看你是否可以像这样添加日期和计时器
struct ContentView: View
let days: String
var body: some View
HStack
Text(days)
Text(":")
Text(Date(), style: .timer)
您可以使用 TimelineProvider 并使小部件在每个午夜更新
func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> ())
let dayremaining = 10 // your day from main app
let midnight = Calendar(identifier: .gregorian).startOfDay(for: Date())
let timeline = Timeline(entries: [ContentView(days:dayremaining)], policy: .after(midnight))
【讨论】:
以上是关于iOS 14 Text() 带天数计时器的主要内容,如果未能解决你的问题,请参考以下文章