iOS14出來了有一段時間,小組件當(dāng)仁不讓火得不要不要的
一步步摸索下來,這里記錄一下?lián)v鼓widget時遇到的坑和要點(diǎn)
【新建小組件】
1、新建一個Objective-c項目
2、給項目添加一個小組件




此時項目已經(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()?
? ? ? }
}