中点击按钮新建widget_iOS 14-Widget开发
Widget 類似一個迷你版的 App,可以快速訪問 App 提供的信息—比如天氣、事件、筆記等。Widget 還可以充當“快捷方式”,點擊它會立即跳轉到 App 的指定位置。
介紹
- WidgetKit 通過在 iOS 主屏幕或 macOS 通知中心放置小部件,讓用戶可以隨時訪問 App 中的內容。Widget 可以保持更新,從而讓用戶獲得最新信息。當需要查看 App 的更多細節時,Widget 會直接跳轉到 App 中的適當位置。
- Widget 有三種不同的尺寸(小號、中號和大號),可以對 Widget 進行個性化定制。
- 要實現一個 Widget,需要給應用添加一個 Widget 擴展并只能使用 SwiftUI 來實現 Widget 的內容。
App實現
Widget 寄宿于 App,所以首先必須將 App 功能實現。
添加Widget
- 擴展名.swift
- 擴展名.intentdefinition
- Assets.xcassets
- Info.plist
數據共享
App 與 Widget 可以通過網絡數據和本地數據兩種方式進行數據的共享。
- 網絡數據可通過 URLSession 完成數據的請求與解析。
- 本地數據共享可以通過 App Groups,它是 iOS 8 之后推出的在 App 之間共享數據的方式,只需要簡單的配置就可以實現數據的共享。(本文以此為例)
配置
實現
配置完成以后,可以通過UserDefaults或FileManager來實現 App 與 Widget 的數據共享,這里以UserDefaults為例,因為 SwiftUI 提供了@AppStorage來簡化操作。
- App
- Widget
編寫Widget
入口
@main struct UserWidget: Widget {private let kind: String = "UserWidget"public var body: some WidgetConfiguration {} }- kind:字符串,唯一標識 Widget。
- WidgetConfiguration:有兩類配置,分別為
- StaticConfiguration : 可以在不需要用戶任何輸入的情況下自行解析,可以在 Widget 的 App 中獲取相關數據并發送給 Widget。
- IntentConfiguration:依賴于 App 的 Siri Intent,會自動接收這些 Intent 并用于更新 Widget,用于構建動態 Widget。
- .supportedFamilies:支持不同尺寸。
內容
不論是哪種配置,都需要提供以下內容。
Entry
渲染 Widget 所需的數據模型,需要遵守TimelineEntry協議。
struct Model: TimelineEntry {let date: Date// 顯示的內容Model }Provider
遵守TimelineProvider協議,告訴 WidgetKit 何時渲染與刷新 Widget。需要實現以下 3 個方法:
struct Provider: TimelineProvider {// 占位視圖,是一個標準的 SwiftUI View,當第一次展示或者發生錯誤時都會展示該 View。func placeholder(in context: Context) -> TimelineEntry {}// 編輯屏幕在左上角選擇添加Widget、第一次展示時會調用該方法func getSnapshot(in context: Context, completion: @escaping (TimelineEntry) -> Void) {}// 進行數據的預處理,轉化成Entry// 最后一定要調用 completion,進而刷新Widgetfunc getTimeline(in context: Context, completion: @escaping (Timeline<TimelineEntry>) -> Void) {} }EntryView
屏幕上 Widget 顯示的內容,可以針對不同尺寸的 Widget 設置不同的 View。
struct EntryView: View {var entry: Provider.Entry // 數據模型@Environment(.widgetFamily) var family // 尺寸環境變量@ViewBuildervar body: some View {switch family {case .systemSmall:// 小尺寸case .systemMedium:// 中尺寸default:// 大尺寸}} }運行
- 先運行 App
- 再運行 Widget
交互
只能點擊,點擊會打開 App。也可以通過.widgetURL(myDeeplink)方法配置當 Widget 被點擊時觸發哪個 Deep Linking,也可以通過使用鏈接使 Widget 的不同部分觸發不同的 Deep Linking(可以直接理解為 Widget 只是一個按鈕,點按這個按鈕會跳轉到指定 URL 對應的頁面)。
- Widget點擊
- App處理
源代碼
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的中点击按钮新建widget_iOS 14-Widget开发的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 天津公积金怎么取出来 天津如何提取公积金
- 下一篇: 怎么取消工商银行每个月的3元短信提示