#swift #swiftui #widget #ios14 #widgetkit
#swift #swiftui #виджет #ios14 #widgetkit
Вопрос:
Я разрабатываю расширение виджета iOS 14.
У меня есть 3 изображения для отображения в цикле и создания временной шкалы для отображения этих изображений.
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()
}
}
Первое изображение всегда отображается, а последующие — нет.
В чем может быть проблема?
Ответ №1:
Настройка временной шкалы для каждой записи необходимо указать явную дату ввода. Параметр политики предназначен для воссоздания следующей временной шкалы.
Итак, ваш getTimeline
должен выглядеть так
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)
}
Комментарии:
1. Нет рендеринга содержимого. Может ли проблема быть связана с
EntryView
?struct WidgetModuleEntryView : View { var entry: Provider.Entry var body: some View { Image(entry.image) .resizable() .scaledToFill() }}
2. Я пропустил, что ваш диапазон начинается с 1, поэтому первое изображение будет показано через 5 минут. См. Исправлено.
3. По-прежнему нет рендеринга контента.
4. Я воспроизвел этот сценарий локально — все работает нормально (просто использовал .second для более быстрой итерации). Xcode 12GM / iOS 14.
5. Изображения не были должным образом добавлены в проект. Теперь это работает. Спасибо, что уделили мне время.