在Objective-C 項目中創(chuàng)建iOS小組件

iOS14出來了有一段時間,小組件當(dāng)仁不讓火得不要不要的

一步步摸索下來,這里記錄一下?lián)v鼓widget時遇到的坑和要點(diǎn)

【新建小組件】

1、新建一個Objective-c項目

2、給項目添加一個小組件

勾選Include Congifuration Intent選項,允許用戶進(jìn)行配置

此時項目已經(jīng)可以進(jìn)行編譯運(yùn)行

【小組件基礎(chǔ)點(diǎn)】

系統(tǒng)自動生成了4個文件,分別是小組件代碼文件,用戶自定義配置小組件的配置文件,資源文件夾,以及info.plist配置文件

WidgetUI.swift? 中包含了幾個小組件的關(guān)鍵函數(shù)

1、可以理解成數(shù)據(jù)結(jié)構(gòu)體,用來保存和傳遞數(shù)據(jù)

struct SimpleEntry: TimelineEntry {? ??

????let date: Date? ?

? ? let configuration: ConfigurationIntent

}

2、Provider:為小組件展示提供一切必要信息的結(jié)構(gòu)體,里面有3個函數(shù)

struct Provider: IntentTimelineProvider {

????func placeholder

????func getSnapshot

????func getTimeline

}

? ? placeholder 提供一個默認(rèn)的視圖用于展示

????getSnapshot?在小部件庫中顯示小部件,在組件的添加頁面可以看到效果

? ??getTimeline 可以理解成為一個時間線,是靜態(tài)的,只能提前將時間線添加好,不能動態(tài)的改變和刷新

3、EntryView 小組件的樣式視圖

struct WidgetUIEntryView : View {

? ? var entry: Provider.Entry

? ? var body: some View {

? ? ? ? Text(entry.date, style: .time)? ?

????}

}

4、小組件的一些配置

@main:代表著Widget的主入口,系統(tǒng)從這里加載

kind:小組件唯一標(biāo)識

StaticConfiguration:初始化配置

configurationDisplayName:小組件庫中展示的標(biāo)題

description:小組件庫中展示的描述

supportedFamilies:組件的樣式,提供了小,中,大三個

@main

struct WidgetUI: Widget {

? ? let kind: String = "WidgetUI"

? ? var body: some WidgetConfiguration {

? ? ? ? IntentConfiguration(kind: kind, intent: ConfigurationIntent.self, provider: Provider(){entry in? ? ? ? ? ?

????????WidgetUIEntryView(entry: entry)?

????????} .configurationDisplayName("My Widget") .description("This is an example ????????widget.").supportedFamilies([.systemSmall,.systemMedium,.systemLarge])? ?

?????}

}

5、添加多個小組件,也可以通過用戶自定義配置來進(jìn)行實(shí)現(xiàn)改變樣式。

@main

struct YourWidgets: WidgetBundle {

????var body: some Widget {

????????????WidgetBundle1().body

????????????WidgetBundle2().body

????}

}

struct WidgetBundle1: WidgetBundle { ? ?

????var body: some Widget {? ?

? ???????XXXWidget()

? ???????XXXWidget()

? ? }

}

struct WidgetBundle2: WidgetBundle {

? ? var body: some Widget {

? ??????XXXWidget()?

? ? ? }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容