(主アプリ+ウィジェット)x AppGroup 。ウィジェットの表示処理
こんにちは、川上です。
ダラダラと備忘録メモを書いてきた
「OSからTimerイベントを受けて、ウィジェット表示画像をランダムに変えたい!」
の件は、今回でEOFです。
Widget組込み時のテンプレートで組込まれていた元のTimerイベント処理は、
1 2 3 4 5 6 7 8 9 10 11 | struct SimpleEntry: TimelineEntry { let date: Date } struct HogeWidgetEntryView : View { var entry: Provider.Entry var body: some View { Text(entry.date, style: .time) } } |
でした。
これに、SimpleEntry: TimelineEntryをカスタマして、Timerイベントを受けての処理部分を、小中大およびiPadの特大用のWidget窓を区別しました。
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | // == TimeLineイベントから、WidgetのViewを更新する struct HogeWdjetEntryView : View { @Environment(\.widgetFamily) var family: WidgetFamily var entry: Provider.Entry var body: some View { // サイズごとにViewを指定する実装 switch family { // TODO: case .systemSmall: HogeWidgetSmallView // TODO: case .systemMedium: HogeWidgetMediumView case .systemLarge: HogeWidgetLargeView // TODO: case .systemExtraLarge: HogeWidgetExtraLargeView @unknown default: fatalError() } } // == body // MARK: ==== systemLarge : ColorChkWidgetLargeView struct ColorChkWidgetLargeView: View { var body: some View { ZStack { Color.black.edgesIgnoringSafeArea(.all) if let uiimage = getWidjetImgToRund() { Image(uiImage:uiimage) .resizable() .scaledToFit() } else { Image(uiImage:TotnLib_Mgr.getImageFromRealm( m_usrdefArry[1].strKey) .resizable() .scaledToFit() } } } // body } //ColorChkWidgetLargeView func getWidjetImgToRund() -> UIImage? { let key = m_usrdefArry[entry.myImgNum].strKey return TotnLib_Mgr.getImageFromRealm(key) } } // === HogeWdjetEntryView() |
で、先の TotnLib_Mgr.getImageFromReal()から、RealmからImageをReadして、各窓に表示更新したのでした。
で、ウィジェットの画像関連の備忘録メモについては、これにてE.O.Fです。
ではでは。