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() 带天数计时器的主要内容,如果未能解决你的问题,请参考以下文章

JS实现倒计时(天数,时,分,秒)

JS实现倒计时(天数,时,分,秒)

带线程的 Python 计时器

iOS 14.7测试版允许HomePod用户从家庭应用设置计时器

php 从结局广告系列中的倒数计时器中删除天数

两种倒计时