【问题标题】:SwiftUI iOS 14 Widget CountDownSwiftUI iOS 14 小部件倒计时
【发布时间】:2020-10-01 12:51:17
【问题描述】:

我有一个带有倒计时功能的 iOS 14 小部件

Text(foo, style: .timer)

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

【问题讨论】:

    标签: swift swiftui widget ios14 widgetkit


    【解决方案1】:

    您可以通过以下方法为1 minute 创建倒计时,当它位于10 seconds 左侧时,文本颜色变为红色。时间一到,倒计时又开始了。

    1. 创建一个条目,其中displayDate 是总时间(此处为 1 分钟):
    struct SimpleEntry: TimelineEntry {
        let date: Date
        let displayDate: Date
        var isDateClose = false
    }
    
    1. 在您的 Provider 中创建两个条目 - 一个用于 standard 颜色,一个用于 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)
        }
    }
    
    1. 在您的视图中使用它:
    struct SimpleWidgetEntryView: View {
        var entry: SimpleProvider.Entry
    
        var body: some View {
            Text(entry.displayDate, style: .timer)
                .foregroundColor(entry.isDateClose ? .red : .primary)
        }
    }
    

    这是一个GitHub repository,其中包含不同的小部件示例,包括倒计时小部件。

    【讨论】:

    • 嗨,请描述一下这段代码是如何工作的?因为我看不到时间递减。谢谢
    猜你喜欢
    • 2020-10-18
    • 2020-10-13
    • 2021-03-05
    • 2017-11-02
    • 2021-03-14
    • 2021-01-10
    • 2021-01-17
    • 2021-02-06
    • 2020-11-22
    相关资源
    最近更新 更多