大阪市中央区 システムソフトウェア開発会社

営業時間:平日09:15〜18:15
MENU

(主アプリ+ウィジェット)x AppGroup 。ウィジェットの表示処理

著者:川上洋
公開日:2021/11/29
最終更新日:2021/11/29
カテゴリー:技術情報 雑記
タグ:

こんにちは、川上です。

ダラダラと備忘録メモを書いてきた
「OSからTimerイベントを受けて、ウィジェット表示画像をランダムに変えたい!」
の件は、今回でEOFです。

Widget組込み時のテンプレートで組込まれていた元のTimerイベント処理は、

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窓を区別しました。

// == 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です。
ではでは。

    上に戻る