Виджет iOS 14 при появлении / появлении события?

#swift #swiftui #widget #ios14 #widgetkit

#swift #swiftui #виджет #ios14 #widgetkit

Вопрос:

Существует ли какой-либо способ повторного отображения содержимого виджета iOS 14 при прокрутке до главного экрана (содержит мой виджет)?

Чтобы уточнить, это домашний экран iOS 14, на котором вы можете разместить любой виджет. Это не расширение today, которое появилось на самом левом главном экране.

Я не нашел ни одного документа об этой технике! Все, что я знаю, это использование Timeline для планирования рендеринга и refreshWidget(widgetKindHere)

В настоящее время я использую IntentTimelineProvider для составления расписания обновлений, часто обновляйте свой стандартный виджет для every 30 minutes

Но, как я вижу, виджет TradingView: когда я прокручиваю свой домашний экран, содержащий его виджет, last updated информация о виджете меняется с 12:00pm (текущего) на 2:55pm (текущий)

-> Это означает, что они не обновляли свой виджет с 12pm до 2:30pm , пока я не прокрутил до главного экрана, содержащего виджет, через несколько секунд он обновляется по адресу 2:55pm

Как TradingView может это сделать?

Ответ №1:

Речь идет не об обнаружении onAppear / onDisappear событиях. То, что вы наблюдаете, — это разумное поведение интеллектуальных стеков. Обычно связано с использованием TimelineEntryRelevance .

У каждого TimelineEntry есть TimelineEntryRelevance . Требуется актуальность, однако предоставляется реализация по умолчанию.

 struct SimpleEntry: TimelineEntry {
    var date: Date
    var relevance: TimelineEntryRelevance?
}

let entry = SimpleEntry(date: Date(), relevance: 0.1)
 

Почему relevance это важно? Он используется Smart Stacks для отображения наиболее релевантного виджета, то есть того, который содержит наиболее релевантную информацию.

От Welcome до Design Great Widgets:

Еще одна функция, которую мы создали, — это интеллектуальные стеки. Они позволяют добавлять несколько разных виджетов в одно место и быстро переключаться между различными виджетами внутри. Но что действительно мощно, так это то, что интеллектуальные стеки динамически изменяются и адаптируются к тому, как вы их используете. В зависимости от вашего поведения и контекста интеллектуальный стек автоматически поворачивается, чтобы показать вам наиболее подходящий виджет в данный момент времени.[курсив добавлен]

От Добавления конфигурации и интеллектуальных данных к вашим виджетам:

Вы хотите, чтобы ваш виджет отображался, когда у вас есть своевременная информация, относящаяся к пользователям, использующим ваше приложение, например, когда вы знаете, что приближается гроза, но не тогда, когда вы просто регулярно обновляете температуру.

Например, если кто-то часто запускает ваше приложение погоды, чтобы узнать погоду, система может вместо этого отобразить в вашем виджете эту информацию, чтобы обеспечить более быстрый доступ к тому, что они ищут.

Второй основан на соответствующей информации из вашего приложения. Так, например, если происходит гроза, ваш виджет может сообщить системе, что у него есть очень актуальное обновление, и система рассмотрит возможность размещения вашего виджета в верхней части стека.


Полезные ссылки: