Render Gambar pada Widget iOS 14

Sep 27 2020

Saya sedang mengembangkan ekstensi Widget iOS 14.

Saya memiliki 3 gambar untuk ditampilkan dalam lingkaran dan membuat Timeline untuk menampilkan gambar-gambar itu.

func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> ()) {
    var entries: [ImageEntry] = []
    let currentDate = Date()
    
    for i in 1 ..< 4 {
        let imageNumber = String(i)
        let currentImage = "image_" + imageNumber
        let entry = ImageEntry(date: currentDate,image: currentImage)
        entries.append(entry)
    }

    let nextUpdateDate = Calendar.current.date(byAdding: .minute, value: 5, to: currentDate)!
    let timeline = Timeline(entries: entries, policy: .after(nextUpdateDate))

    completion(timeline)
}


struct WidgetModuleEntryView : View {
var entry: Provider.Entry

var body: some View {
    Image(entry.image)
        .resizable()
        .scaledToFill()
    }
}

Gambar pertama selalu ditampilkan, tetapi gambar berikutnya tidak.

Apa masalahnya?

Jawaban

2 Asperi Sep 27 2020 at 08:45

Membuat garis waktu Anda perlu menentukan tanggal masuk eksplisit untuk setiap entri. Parameter kebijakan adalah untuk menciptakan waktu berikutnya.

Jadi Anda getTimelineharus terlihat seperti itu

func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> ()) {
    var entries: [ImageEntry] = []
    let currentDate = Date()

    for i in 1 ..< 4 {
        let imageNumber = String(i)
        let currentImage = "image_" + imageNumber
        let entryDate = Calendar.current.date(byAdding: .minute, value: (i-1)*5, to: currentDate)!
        let entry = ImageEntry(date: entryDate, image: currentImage)
        entries.append(entry)
    }

    let timeline = Timeline(entries: entries, policy: .atEnd)
    completion(timeline)
}