SwiftUI iOS 14 WidgetKit 倒计时

标签 swift swiftui widget ios14 widgetkit

我有一个带倒计时的 iOS 14 WidgetKit

Text(foo, style: .timer)

当时间少于 1 分钟时,如何将文本颜色更改为红色?

最佳答案

下面是如何创建 1 分钟 的倒计时,当还剩 10 秒 时,文本颜色会变为红色。当时间结束时,倒计时再次开始。

  1. 创建一个条目,其中 displayDate 是总时间(此处为 1 分钟):
struct SimpleEntry: TimelineEntry {
    let date: Date
    let displayDate: Date
    var isDateClose = false
}
  1. 在您的 Provider 中创建两个条目 - 一个用于标准 颜色,一个用于isClose 颜色(这里是红色):
struct SimpleProvider: TimelineProvider {
    ...

    func getTimeline(in context: Context, completion: @escaping (Timeline<SimpleEntry>) -> Void) {
        let currentDate = Date()
        let firstDate = Calendar.current.date(byAdding: .second, value: 50, to: currentDate)!
        let secondDate = Calendar.current.date(byAdding: .second, value: 60, to: currentDate)!

        let entries = [
            SimpleEntry(date: currentDate, displayDate: secondDate),
            SimpleEntry(date: firstDate, displayDate: secondDate, isDateClose: true),
        ]

        let timeline = Timeline(entries: entries, policy: .atEnd)
        completion(timeline)
    }
}
  1. 在您的 View 中使用它:
struct SimpleWidgetEntryView: View {
    var entry: SimpleProvider.Entry

    var body: some View {
        Text(entry.displayDate, style: .timer)
            .foregroundColor(entry.isDateClose ? .red : .primary)
    }
}

这是一个GitHub repository带有不同的 WidgetKit 示例,包括倒计时 WidgetKit 。

关于SwiftUI iOS 14 WidgetKit 倒计时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64155800/

相关文章:

swift - 如果用户没有执行正确的操作,如何警告用户?

swift - 无法以编程方式将 Storyboard 中的颜色集更改为 xcassets 目录中的颜色

swift - 连续发起多个异步HTTP请求,用Realm写

swift - 是否禁止协议(protocol)类型的 inout 变量?

ios - FileManager 无法在 Xcode 项目中找到 PDF 目录

php - 使用 JS slider 显示来自电子商店 API 的产品的可嵌入小部件

SwiftUI 将 View 存储为变量,同时向其传递一些绑定(bind)

swift - TabView 上的元素删除后不消失

小部件中的 Flutter 相机预览,而不是全屏

android - 检查小部件是否放置在 Android 屏幕上