Widget就是iPhone左滑展示出來的小窗口,我理解為——自家app的又一個入口,哈哈。比如下圖中的天氣。
其實(shí)就覺得這個東西比較神奇好玩兒才打算試試的,但是其中,卻遇到了很多的問題。接下里就系統(tǒng)的記錄一下,如何簡單的實(shí)現(xiàn)這個小的東西,和其中自己遇到的一些問題吧。源代碼點(diǎn)這里。
首先我是創(chuàng)建了一個新的工程,其次因?yàn)閃idget是一個獨(dú)立的進(jìn)程,所以我們要再創(chuàng)建一個target,F(xiàn)ile —— New —— Target 然后選擇Today Extension.

創(chuàng)建好工程之后,就可以先進(jìn)行代碼的編寫了。但是這里有幾個問題問題需要注意。
1、如果在Extension中用到了需要配置路徑的第三方庫,需要切換到Extension中的Target中進(jìn)行配置。

2、我是用cocoapod管理第三方工具的,所以這個時候,進(jìn)行第三方管理的時候,需要區(qū)分是給那個target添加第三方庫。

3、當(dāng)代碼及庫都配置好之后,就需要進(jìn)行代碼的運(yùn)行了,這個時候?yàn)榱藢蓚€進(jìn)程聯(lián)系起來,就需要添加組了。兩個進(jìn)程一定要加到同一個組里面,并且,組要和BundleID一致。同時配置BundleID的時候,主進(jìn)程是正常配置,但是Widget進(jìn)程的BundleID的格式是BundleID.工程名稱。這點(diǎn)需要注意。其實(shí)默認(rèn)的格式是正確的,只要按著格式改成自己的BundleID就好,但是就怕遇到像我這種,看都不看直接改的。所以這里需要注意啊~~~


4、運(yùn)行代碼之前還有一個配置需要修改。直接上圖,按照圖修改就好。一定要改這里,否則的話是加載不出來的。

需要配置的差不多就這些了,但是這些都是很重要的,很容易造成最后顯示的效果就是無法載入,這是最悲傷的了。接下來是關(guān)于Widget的一些基本信息的內(nèi)容吧。
1、Widget有兩種模式,一種是展開狀態(tài),一種是隱藏狀態(tài)。通過代碼可控制。
/*設(shè)置widget的展示模式:
NCWidgetDisplayModeExpanded 展開
NCWidgetDisplayModeCompact 隱藏
*/
self.extensionContext.widgetLargestAvailableDisplayMode = NCWidgetDisplayModeExpanded;
2、Widget的樣式是可以通過更改展開模式的協(xié)議方法來進(jìn)行更改的。比如高度的修改。
//隱藏展開模式改變是調(diào)用此方法
-(void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize
{
if(activeDisplayMode == NCWidgetDisplayModeCompact)
{
self.preferredContentSize = CGSizeMake([[UIScreen mainScreen] bounds].size.width, 110);
}
else
{
self.preferredContentSize = CGSizeMake([[UIScreen mainScreen] bounds].size.width, 210);
}
}
3、Widget的高度,一般來說最低是110,也就是說,當(dāng)設(shè)置widget的高度時,低于110的均是110。
4、設(shè)置好模式和高度之后,就可以正常的創(chuàng)建Widget的頁面了,但是頁面不要太過復(fù)雜,通過查看資料,Widget頁面能承載的最大內(nèi)存是11M。
5、設(shè)置頁面之后,如果與app主體有交互,首先需要頁面點(diǎn)擊事件通過以下調(diào)起URL的方式來進(jìn)行反饋。這個方法其實(shí)是跟app外部通過URL來調(diào)起app是一樣的道理,所以同樣的也需要設(shè)置一個scheme URL,這個過后還會有說明。

6、頁面代碼完成之后,相應(yīng)了,為了能調(diào)起app需要在AppDelegate中配置相應(yīng)的代碼。

7、剛說過,如果要調(diào)起app需要配置一下scheme URL,這里是要配置app主體的scheme URL。配置規(guī)則則是與之前代碼中設(shè)置的URL的規(guī)則保持一致。

都配置完成之后,運(yùn)行代碼之后,應(yīng)該就可以了。但是這個時候左滑會看不到自己的小窗口。其實(shí)是因?yàn)樽约簺]有加入而已。只需要點(diǎn)擊那個編輯,然后加入自己的widget就可以啦!

最近做Widget差不多遇到的就這些問題了,目前做的很簡單,只是頁面的展示,并沒有數(shù)據(jù)的交互和刷新之類的。就以后繼續(xù)補(bǔ)充吧。