(主アプリ+ウィジェット)x AppGroup 。。。ウィジェット表示画像をランダムに変えたい
こんにちは。川上です。
OSからTimerイベントを受けて、ウィジェット表示画像をランダムに変えたい!
が、今回の目的。
Widgetの処理方法が、動かして表示見ていると、結構、??にありました。
巷に、まず潜行して彷徨っていくと、多くの教示Webサイトに辿りました。
有難いことです。
Widgetを組み込まれたテンプレートされた各処理に、My目的のWidgetに内容を弄るのんですwね。で、どうやら、ミソは
getTimeline( )
のようです。
Timeイベントを受ける、getTimeline( ) に、なんたらこんたらするようです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | /// タイムラインを定義 func getTimeline(for configuration: ConfigurationIntent, in context: Context, completion: @escaping (Timeline<Entry>) -> ()) { var entries: [SimpleEntry] = [] let currentDate = Date() for hourOffset in 0 ..< 5 { let entryDate = Calendar.current.date(byAdding: .hour, value: hourOffset, to: currentDate)! let entry = SimpleEntry(date: entryDate, configuration: configuration) entries.append(entry) } // 配列に含めてTimelineにする let timeline = Timeline(entries: entries, policy: .atEnd) completion(timeline) } |
のテンプレートの基本コードに解釈すると、
1.現在の時間( currentDate = Date())から開始して、
2.1時間おきに切り替わる5つのEntryで構成されるタイムラインを生成し
3.let timeline = Timeline(entries: entries, policy: .atEnd)の
policy: .atEndは、タイムライン終了後、新しいタイムラインを要求するポリシー
でした。
・・う〜ん。。 「1時間おきに・・」に表示画像が更新されるのは、ヤダだよね。
・・せめて、2、3分毎に、表示画像が更新したいよなぁ。。
ので、
for hourOffset in 0 ..< 5 {
let entryDate = Calendar.current.date(byAdding: .hour ・・・)
って何?から、これまた巷に彷徨いました。
で、教示によると、コレは、「日付・時刻の単純な加算または減算の方法」でした。
なるほどね。。。
で、分毎用に弄ると。。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | // configurationは、テンプレートの設定作成時にOFFして、省けました。 struct SimpleEntry: TimelineEntry { // let date: Date let myImgNum:Int } func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> ()) { var entries: [SimpleEntry] = [] let currentDate = Date() let min_off = 15 for offset in 0 ..< min_off { let entryDate = Calendar.current.date(byAdding: .minute, value: offset, to: currentDate)! let entry = SimpleEntry(myImgNum: getDateNum()) entries.append(entry) } let timeline = Timeline(entries: entries, policy: .atEnd) completion(timeline) } func getDateNum() -> Int{ return Int.random(in: 0..<m_usrdefArry.count) } |
m_usrdefArry は、アレのmyconst.swiftに組み込んだ配列です。
で、次はTimerで飛んできて表示更新するところですw
ではでは。