【IOS開發(fā)進階系列 整理】Widget專題

1???? 機制原理

1.1???? 概念

1单芜、app extension

????????app extension:extension是iOS8新開放的一種對幾個固定系統(tǒng)區(qū)域的擴展機制,extension并不是一個獨立的app,它有一個包含在app bundle中的獨立bundle剖毯,extension的bundle后綴名是.appex圾笨。當(dāng)然它有好多類型,如下圖官方文檔上介紹的那天逊谋,今天我們主要講解的就是Today中的擂达,又叫做widget。

2胶滋、containing app

????????包含extension的app就是containning app板鬓,因為extension不能單獨存在,所以必須得依附在一個正常的app里究恤,這樣才能提交商店俭令。

3、host app

????????能夠調(diào)起extension的app被稱為host app丁溅,比如widget的host app就是Today唤蔗。

我們看下它們?nèi)咧g是如何工作的,如下圖:

2???? 實現(xiàn)

2.1???? 新建Target

????????接下來我們具體看如何完成一個簡單的DEMO窟赏,這樣你就更加了解了妓柜。

????????首先我們先新建一個工程,這一步就省略了涯穷,接下來我們增加一個target,選擇Today Extension棍掐,如下圖:

????????然后創(chuàng)建完,如下圖:

????????默認創(chuàng)建的storyboard里是hello world拷况,所以我們先run項目作煌,看看效果:

????????是不是很簡單,^_^赚瘦。粟誓。。

2.2???? 數(shù)據(jù)共享

????????那么接下來我們看下containing app跟extension如何共享數(shù)據(jù)起意,例如我containing app里的數(shù)據(jù)鹰服,我要在extension顯示。

2.2.1 添加app groups

????????在這之前揽咕,我們要先講下app groups悲酷,它主要用于同一group下的app共享同一份讀寫空間,以實現(xiàn)數(shù)據(jù)共享亲善。我們看下工程中如何開啟app groups设易,首先們選擇targets,然后選擇containing app蛹头,->Capabilities顿肺,打開app groups的開關(guān)戏溺,如下圖:

????????點下面的加號按鈕,新建一個group挟冠,例如:group.com.company.app于购,如下圖:

????????創(chuàng)建完后如下圖:? ??

????????同理,選擇targets為extension知染,同樣創(chuàng)建一個app groups肋僧,選擇跟containing app一樣的名字,就是containing app里的app groups跟extension里的app groups名字相同控淡,如下圖:

????????OK嫌吠。。掺炭。app groups創(chuàng)建好后辫诅,我們就可以實現(xiàn)數(shù)據(jù)共享了,

2.2.2 共享數(shù)據(jù)讀寫

2.2.2.1? 通過NSUserDefaults

????????第一種方法是通過NSUserDefaults涧狮,存數(shù)據(jù)代碼如下:NSUserDefaults?*shared?=?[[NSUserDefaults?alloc]?initWithSuiteName:groupID];??

?[shared?setObject:[NSNumber?numberWithInt:10]?forKey:@"number"];??

[shared?synchronize];??


????????取數(shù)據(jù)如下:

NSUserDefaults?*shared?=?[[NSUserDefaults?alloc]?initWithSuiteName:groupID];? ? ?

NSString?*string=[NSString?stringWithFormat:@"%@",[shared?objectForKey:@"number"]];? ? ?

_numberLabel.text=string;??

????????我們在containing app中存一個數(shù)據(jù)炕矮,然后在extension里取一個數(shù)據(jù),demo中我存了一個數(shù)字10者冤,然后我們看下效果:

2.2.2.2? 通過NSFileManager

????????還有一種方法是通過NSFileManager來實現(xiàn)肤视,存數(shù)據(jù)代碼如下:

NSError?*err?=?nil;? ? NSURL?*containerURL?=?[[NSFileManager?defaultManager]?containerURLForSecurityApplicationGroupIdentifier:groupID];??

containerURL?=?[containerURL?URLByAppendingPathComponent:@"Library/Caches/test"];? ??

NSString?*value?=@"123";? ? BOOL?result?=?[value?writeToURL:containerURL?atomically:YES?encoding:NSUTF8StringEncoding?error:&err];??

????取數(shù)據(jù)代碼如下:

NSError?*err?=?nil;??

NSURL?*containerURL?=?[[NSFileManager?defaultManager]?containerURLForSecurityApplicationGroupIdentifier:groupID];??

containerURL?=?[containerURL?URLByAppendingPathComponent:@"Library/Caches/test"];??

NSString?*value?=?[NSString?stringWithContentsOfURL:containerURL?encoding:NSUTF8StringEncoding?error:&err];??

2.2.2.3? 共享代碼

????????對于更復(fù)雜工程里加入extension,可能需要共享代碼涉枫,你可能需要把一些公用的數(shù)據(jù)寫入自己的framework中邢滑,然后containing app跟extension中各存一個,以此來達到共用代碼愿汰,至于具體的實現(xiàn)困后,各位可以自己去嘗試嘗試^_^。衬廷。

2.3???? 點擊extension內(nèi)容回到containing app

????????我們再看下通過點擊extension里的內(nèi)容來回到containing app中摇予,其實就是通過openurl,首先需要在containing app中創(chuàng)建url type吗跋,如下圖:

????????在extension中趾盐,寫如下代碼:


[self.extensionContext?openURL:[NSURL?URLWithString:@"TestWight://"]?completionHandler:^(BOOL?success)?{??

????NSLog(@"open?url?result:%d",success);??

}];??

需要注意的地方是,extension中view的位置不是最左邊開始的小腊,而是默認從icon后開始的,所以如需修改久窟,代碼入下:

//?一般默認的View是從圖標(biāo)的右邊開始的...如果你想變換,就要實現(xiàn)這個方法??

-?(UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets?{??

????//UIEdgeInsets?newMarginInsets?=?UIEdgeInsetsMake(defaultMarginInsets.top,?defaultMarginInsets.left?-?16,?defaultMarginInsets.bottom,?defaultMarginInsets.right);??

????//return?newMarginInsets;??

????//return?UIEdgeInsetsZero;?//?完全靠到了左邊....??

????return?UIEdgeInsetsMake(0.0,?16.0,?0,?0);??

}??

????????還有就是有時view里的控件看不見秩冈,所以需要添加這句話:

self.preferredContentSize?=?CGSizeMake(self.view.bounds.size.width,?100);??

????????需要手動自己添加,在下拉通知里的edit里斥扛,

2.4???? 常見使用問題

2.4.1 運行后Today中沒有widget

????????可能是新建的工程的Deployment Target版本太高了入问,比測試機版本高丹锹,導(dǎo)致存在版本兼容性問題,將版本值設(shè)為6.0或者7.0即可芬失。


3???? 參考鏈接

ios8新特性widget開發(fā)

http://blog.csdn.net/kuloveyouwei/article/details/44019815

iOS開發(fā)之構(gòu)建Widget

http://www.imooc.com/wenda/detail/253341

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末楣黍,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子棱烂,更是在濱河造成了極大的恐慌租漂,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颊糜,死亡現(xiàn)場離奇詭異哩治,居然都是意外死亡,警方通過查閱死者的電腦和手機衬鱼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進店門业筏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鸟赫,你說我怎么就攤上這事蒜胖。” “怎么了抛蚤?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵台谢,是天一觀的道長。 經(jīng)常有香客問我霉颠,道長对碌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任蒿偎,我火速辦了婚禮朽们,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘诉位。我一直安慰自己骑脱,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布苍糠。 她就那樣靜靜地躺著叁丧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪岳瞭。 梳的紋絲不亂的頭發(fā)上拥娄,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天,我揣著相機與錄音瞳筏,去河邊找鬼稚瘾。 笑死,一個胖子當(dāng)著我的面吹牛姚炕,可吹牛的內(nèi)容都是我干的摊欠。 我是一名探鬼主播丢烘,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼些椒!你這毒婦竟也來了播瞳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤免糕,失蹤者是張志新(化名)和其女友劉穎赢乓,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體说墨,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡骏全,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了尼斧。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片姜贡。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖棺棵,靈堂內(nèi)的尸體忽然破棺而出楼咳,到底是詐尸還是另有隱情,我是刑警寧澤烛恤,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布母怜,位于F島的核電站,受9級特大地震影響缚柏,放射性物質(zhì)發(fā)生泄漏苹熏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一币喧、第九天 我趴在偏房一處隱蔽的房頂上張望轨域。 院中可真熱鬧,春花似錦杀餐、人聲如沸干发。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽枉长。三九已至,卻和暖如春琼讽,著一層夾襖步出監(jiān)牢的瞬間必峰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工钻蹬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留自点,地道東北人。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓脉让,卻偏偏與公主長得像桂敛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子溅潜,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,922評論 2 361

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