[iOS14]WidgetKit开发实战1-初识iOS小部件
前言
2020年06月22日的WWDC上iOS14的新特性-小部件正式在iOS上线,同时WidgetKit也正式面向广大开发者使用。
也正是因为对Android的小部件有所了解,故想尝试下iOS的小部件的开发,并且发现当前并没有相关的文章,故记录下我学习WigetKit的经历,以下均为自己学习路上的经历,可能会有些问题,还望大佬指正。
同时已把学习路上写的代码开源 - iWiget,看完这篇文章认为有用就点个Star呗!
项目地址: https://github.com/Littleor/iWidget
初识iOS小部件
1.下载Xcode12
开发Widget需要使用到Xcode12,目前依旧是beta版本,需要在官网使用开发者账号下载。
开发者账号的注册是免费的,使用AppleId注册后直接下载使用即可。
具体步骤网上有很多,这里不再赘述。
2.创建一个项目
欲使用WidgetKit必先创建一个iOS的项目,按常规操作来即可。
点击Create a new Xcode Project来创建新项目
选择iOS->App再点击Next
App">
Name随便填,Organization Identifier填写翻转域名即可。
创建完成就出现默认的Hello World!啦
3.开始使用WidgetKit
首先点击左上角的File->New->Target添加Target
然后选择Widget Extension
配置Wiget即可,Name和项目名字不能一样哦
点击Finsh之后Xcode就会帮你自动生成一个默认的Widget文件了
运行到iOS14设备上后就可以看到默认的时钟Widget了!
4.默认Widget文件结构分析
1.Provider
Provider实现了IntentTimelineProvider,主要用于提供数据和控制数据的刷新,其中有两个关键函数:
public func snapshot(for configuration: ConfigurationIntent, with context: Context, completion: @escaping (SimpleEntry) -> ())和
public func timeline(for configuration: ConfigurationIntent, with context: Context, completion: @escaping (Timeline<Entry>) -> ()),其中snapshot会在Widget被添加的时候执行,timeline通过
Timeline(entries: entries, policy: .atEnd)刷新数据和控制下一步刷新时间.
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) } }
这里只写如何使用,具体内容下一篇细述。
2.SimpleEntry
SimpleEntry实现了TimelineEntry,主要用于保存Widget的数据。
struct SimpleEntry: TimelineEntry { public let date: Date public let configuration: ConfigurationIntent }
3.PlaceholderView
PlaceholderView用于显示默认Widget,当Widget还没获取到数据的时候会默认显示这里的布局。
struct PlaceholderView : View { var body: some View { Text("Placeholder View") } }
4.WidgetDemoEntryView
WidgetDemoEntryView是Widget的布局部分,是Widget的View的部分。
struct WidgetDemoEntryView : View { var entry: Provider.Entry var body: some View { Text(entry.date, style: .time) } }
5.Widget
这里可以说是Widget的入口了罢,这里定义了Widget的
Kind、
Provider、
View等。
@main struct WidgetDemo: Widget { private let kind: String = "WidgetDemo" 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.") } }
5.如何创建多个Widget?
iOS创建多个小部件不能像Android一样直接建立多个Widget的配置文件,否则会报错,而是可以直接修改当前Widget的入口文件即可,Apple提供了相关API:
@main struct Widgets: WidgetBundle { @WidgetBundleBuilder var body: some Widget { Widget1() Widget2() Widget3() } }
改变@main为WidgetBundle,再创建多个Widget的struct即可.
后记
在这几天对WidgetKit的学习后,从开发者的角度来说,iOS的Widget开发实在让人舒适,而没有Android Widget开发的那种凌乱感(也可能是我太菜了才感觉凌乱…)
总体对iOS的Widget还是很满意的,无论是开发体验还是用户体验(除了iOS14 Public Beta在点击配置小部件的时候会卡一下)。
后续还会慢慢完善WidgetKit开发的文章,同时iWiget也会不断完善,这篇文章对你有用就点个Star吧!
项目地址: https://github.com/Littleor/iWidget
- [iOS14]WidgetKit开发实战2-开发一言小部件
- [iOS14]WidgetKit开发实战3-小部件用户配置
- 《React Native 精解与实战》书籍连载「配置 iOS 与 Android 开发环境」
- iOS项目开发实战——使用代码实现页面跳转
- iOS开发之OC篇(1)——初识iOS开发
- cordova插件iOS平台实战开发注意点
- Xamarin iOS开发实战下册 (内部资料)
- iOS实战开发常见问题(一)
- iOS开发_初识视频直播
- Cordova - 使用Cordova开发iOS应用实战2(生命周期、使用Safari调试)
- iOS项目开发实战——通过Http Post方式与服务器通信
- iOS项目开发实战——使用同步请求获取网页源码
- Visual Studio跨平台开发实战(2) - Xamarin.iOS基本控制项介绍
- Xamarin iOS开发实战1.1.3Xamarin版本
- 视频教程-TCP/IP/UDP Socket通讯开发实战 适合iOS/Android/Linux-其他
- iOS项目开发实战——自定义设置导航栏和状态栏背景
- Xamarin iOS开发实战(内部资料)
- IOS开发-14.利用代码添加autolayout约束
- iOS开发14:UITableView与UITableViewCell
- IOS培训实战教程之开发的21个奇葩技巧