2020年06月22日的WWDC上iOS14的新特性-小部件正式在iOS上線,同時WidgetKit也正式面向廣大開發者使用。git
也正是由於對Android的小部件有所瞭解,故想嘗試下iOS的小部件的開發,而且發現當前並無相關的文章,故記錄下我學習WigetKit的經歷,如下均爲本身學習路上的經歷,可能會有些問題,還望大佬指正。github
同時已把學習路上寫的代碼開源 - iWiget,看完這篇文章認爲有用就點個Star唄!api
項目地址: github.com/Littleor/iW…bash
前面幾期的連接:app
小部件用戶配置界面不須要咱們本身去寫了,WidgetKit已經爲咱們作好了,咱們須要的只是添加一個SiriIntent來獲取咱們須要的數據便可,而後Widgetkit會自動生成對應的配置界面,用戶只須要長按小部件後點擊Edit Widget便可配置Widget的數據了。post
左上角導航選擇File->New->File而後找到Siri Intent Definition File以後添加到WidgetExtension中便可。 學習
這裏的配置須要根據你對Widget須要的數據來配置測試
打開Siri Intent Definition File後因爲是新建的文件應該是空的,這個時候先在導航欄找到Editor添加Intent
添加完成以後應該是這樣的
而後在對Intent進行配置
注意不是對Response配置哦!
注意Target要選擇到Widget Extensive哦!
目前Xcode12-beta有bug,須要重啓Xcode以後纔會顯示配置項!
目前Xcode12-beta有bug,須要重啓Xcode以後纔會顯示配置項!
目前Xcode12-beta有bug,須要重啓Xcode以後纔會顯示配置項!
其中type必須換成View而後Title換成本身的命名(後面會用到這個Intent) Parameter中添加你須要用戶輸入的內容便可,這裏使用content作個示範(String類型).
打開Swift文件,把Widget內容替換爲Intent
public var body: some WidgetConfiguration {
IntentConfiguration(kind: kind, intent: ConfigurationIntent.self, provider: Provider(), placeholder: PlaceholderView()) { entry in
WidgetDemoEntryView(entry: entry)
}
.configurationDisplayName("My Widget")
.description("This is an example widget.")
}
複製代碼
再將Provider類型換爲IntentTimelineProvider:
下面是Xcode自動生成的代碼 不少不必的 主要是改成IntentTimelineProvider
struct Provider: IntentTimelineProvider {
public func snapshot(for configuration: ConfigurationIntent, with context: Context, completion: @escaping (SimpleEntry) -> ()) {
let entry = SimpleEntry(date: Date(), configuration: configuration)
completion(entry)
}
public func timeline(for configuration: ConfigurationIntent, with context: Context, completion: @escaping (Timeline<Entry>) -> ()) {
var entries: [SimpleEntry] = []
// Generate a timeline consisting of five entries an hour apart, starting from the current date.
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)
}
let timeline = Timeline(entries: entries, policy: .atEnd)
completion(timeline)
}
}
複製代碼
再在view中顯示內容:
struct DemoWidgetEntryView : View {
var entry: Provider.Entry
var body: some View {
Text(entry.content == nil ? "PlaceHolder" : entry.content!)
}
}
複製代碼
iOS的Widgetkit對於用戶配置的開發實在太友好了,只須要使用Xcode提供的可視化工具添加參數便可生成配置界面,方便快捷,UI統一。
相比Andorid使用指定的設置Fragment來說,方便快捷多了。
對於小部件的配置Widgetkit已經直接封裝到了Intent的參數中,只須要添加後在Entry中使用便可。
這一次大概整理了下Widget添加用戶配置界面的大概過程,還有小部件點擊交互操做下次再分享,敬請期待。
完整代碼見GitHub
後續還會慢慢完善WidgetKit開發的文章,同時iWiget也會不斷完善,這篇文章對你有用就點個Star吧!
項目地址: github.com/Littleor/iW…