標籤:ios widget extension
從iOS8開始,下拉的”今天”裡,應用可以添加自己的小widget,就是這樣的東西:
這個東西在Android裡叫widget,不過在iOS中我們叫它Today Extension,因為它是iOS中眾多種類的extensions中的一種。
Extensions有很多種,Today Extension之外,還有包括Share、Action、Photo Editing、Document Provider、Custom Keyboard、Watch App這些;其中一些很熟悉,像Watch App,另外一些可能不太熟悉;今天主要來研究Today Extension。
首先,如何建立一個Today Extension呢?很簡單,在已有的項目裡,在Xcode裡,選擇File-New-Target-Application Extension-Today Extension,建立一個target,如所示。
這樣,一個Today Extension就建好啦。Run一下(就是那個new name,一個空的Today Extension):
是的,建立一個Today Extension就是這麼簡單。對於開發人員來說,一個Today Extension其實就是一個有點兒特殊的UIViewController;我們可以向這個View Controller中添加subviews,執行任務,等等。不過在開發的過程中,還有一些常見的問題:
對於Today Extension來講,主App的官方名稱叫Containing App;widget並沒有什麼特殊的方式跟Containing App互動,只能跟其它App一樣,調用URL Scheme來跳轉到Containing App中,執行一些特定操作。
- 如何確定Today Extension的高度和寬度?
對於Today Extension來說,它的寬度是不能變的,就是螢幕的寬度;而它的高度可以根據內容動態變化。蘋果推薦我們使用auto layout,這樣Today Extension的高度就可以自適應變化;如果不用auto layout的話,還可以調用
self.preferredContentSize = CGSizeMake(0,100);
來將其高度定為100;
定時重新整理很簡單,用NSTimer就可以,只是要注意dealloc的時候,將NSTimer銷毀;
對於下拉重新整理,我們就要先搞清楚,下拉的時候,都調用了哪些方法。剛才講了,Today Extension其實就是一個View Controller,因此它的生命週期,也是viewDidLoad-viewWillAppear-viewDidAppear-viewWillDisappear-viewDidDisappear-dealloc這個路子。也就是說,每次下拉展示Today Extension的時候,都會將這個流程走一遍,所以我們只要在viewDidLoad裡調用最新結果就可以了。
- 如何修改Icon旁邊的名字?
預設的名字都是Containing App的Bundle Name,不過我們可以修改這個名字,方法:在Info.plist裡,修改Bundle display name。
蘋果對Today Extension的建議:蘋果認為,Today Extension就是一個執行簡單操作、介面也簡單的地方,不應當有複雜的介面、複雜的操作。因此最好不要在這裡搞的很複雜,否則可能會在提交審核的時候被拒掉。
一些需要注意的地方:
Today Extension不是正常的App,因此有一些限制:
以上就是關於Today Extension的普通問題,還有一些高端的情況,比如增加view時重新整理高度、確定extension在特定情況下出現/特定情況下消失,等等情況,還有待進一步研究。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
iOS Today Extension/widget編程小記