SwiftUI iOS 14 Widget CountDown

Oct 01 2020

ฉันมีวิดเจ็ต iOS 14 พร้อมการนับถอยหลัง

Text(foo, style: .timer)

ฉันจะเปลี่ยนสีข้อความเป็นสีแดงได้อย่างไรเมื่อเวลาน้อยกว่า 1 นาที

คำตอบ

2 pawello2222 Oct 01 2020 at 18:45

นี่คือวิธีที่คุณสามารถสร้างการนับถอยหลัง1 minuteโดยที่สีข้อความจะเปลี่ยนเป็นสีแดงเมื่อ10 secondsเหลืออยู่ เมื่อหมดเวลาการนับถอยหลังจะเริ่มขึ้นอีกครั้ง

  1. สร้างรายการโดยที่displayDateเวลารวมอยู่ที่นี่ (1 นาที):
struct SimpleEntry: TimelineEntry {
    let date: Date
    let displayDate: Date
    var isDateClose = false
}
  1. ในผู้ให้บริการของคุณสร้างสองรายการ - รายการหนึ่งสำหรับสีมาตรฐานและอีกรายการสำหรับสี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. ใช้ในมุมมองของคุณ:
struct SimpleWidgetEntryView: View {
    var entry: SimpleProvider.Entry

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

นี่คือที่เก็บ GitHubพร้อมตัวอย่างวิดเจ็ตต่างๆรวมถึงวิดเจ็ตการนับถอยหลัง