iOS 10 適配 Widget

一、前言

隨著iOS版本來到10,我們開發(fā)的應(yīng)用種類也越來越豐富,范圍也不僅僅局限在app本身,Apple為我們提供了多項(xiàng)系統(tǒng)擴(kuò)展服務(wù),讓你的app與系統(tǒng)層級(jí)有更多交互。

File-New-Target


我們今天要說的就是將你的app擴(kuò)展到系統(tǒng)中Today的應(yīng)用:TodayExtension。

廢話不多說,我們開始實(shí)現(xiàn)一個(gè)簡單的Widget功能。


二、實(shí)現(xiàn)Widget

創(chuàng)建好Target Today服務(wù)后,會(huì)在XCODE中生成一個(gè)目錄

同時(shí)配置文件中也會(huì)生成新的Target,設(shè)置好標(biāo)題我們就可以開始寫代碼了。

當(dāng)你新建了這個(gè)Target時(shí),不會(huì)共享你原有項(xiàng)目的Target的組件或者第三方的插件,我剛開始也是在想玩什么我的AF居然not find。后來才反應(yīng)過來是在另一個(gè)Target了,這里就好像你每創(chuàng)建一個(gè)項(xiàng)目附帶產(chǎn)生的Tests一樣。

那現(xiàn)在知道我們不能用之前項(xiàng)目中的內(nèi)容了,我們新的功能如果要用第三方又的自己新加進(jìn)來使用。

TodayViewController.m

TodayViewController.m

我們發(fā)現(xiàn)它自動(dòng)代理了NCWidgetProviding協(xié)議。

還導(dǎo)入了一個(gè)API:NotificationCenter,其中有很多Widget需要的API,就不一一列舉了,自己可以點(diǎn)進(jìn)去看

我們看看它到底有哪些需要實(shí)現(xiàn)的:

下圖可以看到3個(gè)optional

NCWidgetProviding協(xié)議

- (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult result))completionHandler;

大致意思是建議你通過實(shí)現(xiàn)它的回調(diào)來獲取數(shù)據(jù),你也可以在viewwillappear中設(shè)置你的初始數(shù)據(jù),但是希望你在獲取到新數(shù)據(jù)時(shí)能平穩(wěn)的過渡到新的數(shù)據(jù)來。并且它是在主線程更新。

- (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize NS_AVAILABLE_IOS(10_0);

這個(gè)代理就是很多人問的Widget折疊和收起,實(shí)現(xiàn)了之后就會(huì)在Widget上有“折疊”和“收起”的功能。這里要根據(jù)NCWidgetDisplayMode枚舉來判斷當(dāng)前是處于哪個(gè)狀態(tài)。

NCWidgetDisplayMode

if (activeDisplayMode == NCWidgetDisplayModeCompact) {

? ? ?self.preferredContentSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, 100);

} else {

? ? ?self.preferredContentSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, 400);

}


寬度我這里用的是屏幕寬,高度自己設(shè)定。

- (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets;

這個(gè)方法主要是修改Widget的MarginInset的,默認(rèn)Widget的內(nèi)容視圖是有一定邊距的,如果想要去掉要實(shí)現(xiàn)這個(gè)代理方法。

介紹到這里相信你自己再開發(fā)功能就不用我來說了吧。

要注意的是Widget中不支持鍵盤彈出,也不建議ScrollView的滑動(dòng)。蘋果也建議上面的功能不要打斷正常APP功能里的業(yè)務(wù)流程。

下面在分享幾個(gè)我覺得做的好的Widget

天貓

什么值得買


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容