SwiftUI iOS 14 Widget CountDown

Oct 01 2020

Tôi có một tiện ích iOS 14 với Đồng hồ đếm ngược

Text(foo, style: .timer)

Làm cách nào để thay đổi màu văn bản thành màu đỏ khi thời gian dưới 1 phút?

Trả lời

2 pawello2222 Oct 01 2020 at 18:45

Đây là cách bạn có thể tạo bộ đếm ngược 1 minutevới màu văn bản thay đổi thành màu đỏ khi nó 10 secondsở bên trái. Khi hết thời gian đếm ngược lại bắt đầu.

  1. Tạo Mục nhập trong đó displayDatetổng thời gian (ở đây là 1 phút):
struct SimpleEntry: TimelineEntry {
    let date: Date
    let displayDate: Date
    var isDateClose = false
}
  1. Trong Nhà cung cấp của bạn, hãy tạo hai Mục nhập - một cho màu chuẩn và một cho màu isClose (ở đây là màu đỏ ):
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. Sử dụng nó theo quan điểm của bạn:
struct SimpleWidgetEntryView: View {
    var entry: SimpleProvider.Entry

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

Đây là kho lưu trữ GitHub với các ví dụ Widget khác nhau bao gồm Widget đếm ngược.