swift - SwiftUI iOS 14 小部件倒计时
问题描述
我有一个带有倒计时的 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 创建两个条目 - 一个用于标准颜色,一个用于isClose颜色(此处为red):
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 存储库,其中包含不同的 Widget 示例,包括 Countdown Widget。
推荐阅读
- php - 如何从 php 函数返回 db 查询的结果?
- node.js - 当我在表名中有大写字母时,Moongoose Model.find() 返回空数组
- java - 如何在 Angular 中调用 Java HTTP POST 方法
- java - 无法在 Java 中加载静态库 - UnsatisfiedLinkError:无效的 ELF 标头(可能的原因:字节序不匹配)
- angular - input type=date in not working in Internet Explorer 11 for my angular 7 project
- ionic-framework - 需要在 Ionic 4 中将点击的图像捕获为 base64
- javascript - Rails 6 SPA ActiveStorage 无效的请求参数:UTF-8 中的无效字节序列
- node.js - 如何在 gitlab ci 中测试微服务的交互?
- javascript - Angular 的最佳实践
- swift - 从 UICollectionViewCell 滚动统计时,UICollectionView 不滚动