SwiftUI iOS 14 小部件倒计时
SwiftUI iOS 14 Widget CountDown
我有一个 iOS 带有倒计时的 14 小部件
Text(foo, style: .timer)
如何在时间少于 1 分钟时将文本颜色更改为红色?
以下是为 1 minute
创建倒计时的方法,当倒计时还剩 10 seconds
时,文本颜色会变为红色。时间结束后,倒计时再次开始。
- 创建一个条目,其中
displayDate
是总时间(此处为 1 分钟):
struct SimpleEntry: TimelineEntry {
let date: Date
let displayDate: Date
var isDateClose = false
}
- 在您的 Provider 中创建两个条目 - 一个用于 standard 颜色,一个用于 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)
}
}
- 在您的视图中使用它:
struct SimpleWidgetEntryView: View {
var entry: SimpleProvider.Entry
var body: some View {
Text(entry.displayDate, style: .timer)
.foregroundColor(entry.isDateClose ? .red : .primary)
}
}
这里有一个 GitHub repository 包含倒计时小部件的不同小部件示例。
我有一个 iOS 带有倒计时的 14 小部件
Text(foo, style: .timer)
如何在时间少于 1 分钟时将文本颜色更改为红色?
以下是为 1 minute
创建倒计时的方法,当倒计时还剩 10 seconds
时,文本颜色会变为红色。时间结束后,倒计时再次开始。
- 创建一个条目,其中
displayDate
是总时间(此处为 1 分钟):
struct SimpleEntry: TimelineEntry {
let date: Date
let displayDate: Date
var isDateClose = false
}
- 在您的 Provider 中创建两个条目 - 一个用于 standard 颜色,一个用于 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)
}
}
- 在您的视图中使用它:
struct SimpleWidgetEntryView: View {
var entry: SimpleProvider.Entry
var body: some View {
Text(entry.displayDate, style: .timer)
.foregroundColor(entry.isDateClose ? .red : .primary)
}
}
这里有一个 GitHub repository 包含倒计时小部件的不同小部件示例。