App Extension 之 Today

Today 視圖的中擴展被稱為插件使鹅。用戶可以通過插件快速訪問當前重要的信息。比如盐捷,用戶打開 Today 視圖檢查當前的股票價格和天氣情況孽江,查看日程安排或者快速執(zhí)行類似標記已完成項目等操作。用戶會頻繁打開Today視圖宣鄙,并且他們期望能立即看到他們感興趣的信息袍镀。插件也能展示在iOS設備的鎖屏界面上。

開始之前
要確保 Today 擴展點適合你想提供的功能冻晤。最好的插件可以為用戶展現最近的更新或者完成簡單的任務苇羡。如果你創(chuàng)建的擴展想完成步驟繁多或者比較耗時的任務,比如上傳或者下載內容鼻弧,那么Today擴展可能不是最佳選擇设江。

可參看 Table 1-1 了解你可以創(chuàng)建的其他擴展類型。

理解Today 插件
在兩個平臺上攘轩,Today 插件應該:
1.確保內容永遠是最新的
2.正確響應用戶的操作
3.高效運行(特別是iOS插件必須合理使用內存叉存,否則系統(tǒng)可能終止插件的運行)

由于與插件的交互快速且有限制,所以你應該設計一個精簡的UI以突出用戶感興趣的信息度帮。通常鹉胖,一個很好的辦法是限制插件中可交互項的數目,尤其要注意iOS插件不支持鍵盤輸入。

注意:避免在插件中放置滾動視圖甫菠,因為用戶在滾動插件中的內容時挠铲,會很容易誤滾動整個Today視圖。

用戶使用的平臺不同寂诱,因此插件配置方式也有差別拂苹。

iOS.由于插件不允許鍵盤輸入,所以用戶需要能使用containing app來配置插件的內容和行為痰洒。比如瓢棒,在 Stocks 插件中,用戶可在不同的股票值之間進行切換丘喻,但是他們必須打開Stocks app來管理股票列表脯宿。

OS X.containing app可能不會執(zhí)行任何功能,所以插件在運行時需要給用戶配置它的方式泉粉。比如连霉,OS X中的Stocks插件可以讓用戶找到和添加他們想要追蹤的股票。OS X中通知中心的API包括可以讓用戶配置插件的方法嗡靡。

在用戶安裝完包含 Today 插件的應用程序后跺撼,他們可以為 Today 視圖添加插件。當用戶在 Today 視圖中選擇編輯時讨彼,通知中心會展現一個視圖讓用戶添加插件歉井,并可對其進行排序和移除。

使用Xcode的Today模板
Xcode的Today模板為主要類提供了默認的頭文件和執(zhí)行文件(命名為TodayViewController)哈误,一個Info.plist文件哩至,一個界面文件(一個storyboard或者xib文件)。

默認情況下蜜自,Today 模板提供了以下 Info.plist 鍵和值(這里展示的是OS X target):
NSExtension

    NSExtensionPointIdentifier 
    com.apple.widget-extension 
    NSExtensionPrincipalClass 
    TodayViewController 

如果你使用了自定義視圖控制器子類菩貌,那么使用自定義類的名字來取代NSExtensionPrincipalClass 鍵對應的TodayViewController值。

iOS.如果你不想使用模板提供的storyboard文件袁辈,那就移除NSExtensionMainStoryboard 鍵菜谣,并添加NSExtensionPrincipalClass 鍵珠漂,使用view controller的名字作為值晚缩。

創(chuàng)建Today插件所需的大部分工作包括設計UI和實現一個完成自定義功能的view controller子類。

設計UI
重要:為了獲得最佳的效果媳危,請使用Auto Layout設計Today插件的視圖荞彼。

由于Today視圖的空間有限,并且用戶體驗應該是快速和集中的待笑,你不應該默認創(chuàng)建一個過大的插件鸣皂。在兩個平臺上,一個插件必須適應Today視圖的寬度,但是它可以通過增加高度來展示更多的內容寞缝。

默認情況下癌压,插件視圖包括標準的margin insets。如果你需要檢查或者改變邊距值荆陆,你可以遵循 NCWidgetProviding 協(xié)議滩届,并實現widgetMarginInsetsForProposedMarginInsets:方法。

在大多數情況下被啼,調整margin insets不是必須的帜消,但如果你的設計需要你可能會這么做。比如浓体,Reminders插件在左側邊緣展示復選框圖片泡挺。

如果插件需要展示額外的內容,你可以用Auto Layout約束來調整插件到合適的高度命浴。如果不使用Auto Layout娄猫,那你可以使用UIViewController 屬性 preferredContentSize來指定插件的新高度。比如:

  • (void)receivedAdditionalContent {
    self.preferredContentSize = [self sizeNeededToShowAdditionalContent];
    }
    通常情況下咳促,你不應該讓插件過高稚新,因為用戶必須滾動才能查看全部內容。

iOS.如果你想讓調整高度的動畫和展示內容的動畫一起執(zhí)行跪腹,實現viewWillTransitionToSize:withTransitionCoordinator:方法褂删。用animateAlongsideTransition:completion:方法把動畫添加到coordinator參數中。

為了讓你的插件能在Today視圖中清晰地展示出來冲茸,可使用notificationCenterVibrancyEffect屯阀。

OS X. 插件會從它的view controller所在的視圖中繼承NSAppearanceNameVibrantDark當使用標準控件時,你會自動獲得正確的外觀轴术。如果使用自定義顏色难衰,那要確保所選顏色在深色視圖中看起來也很適合。

更新內容
Today 擴展點提供了API來管理插件的狀態(tài)逗栽,并處理內容更新(你可以在 Notification Center Framework Reference 閱讀關于該API的內容)盖袭。雖然 Today API 針對特定平臺會有所不同,但兩個平臺都支持的功能的API大部分是相同的彼宠。

為了讓插件看起來保持最新的內容鳄虱,系統(tǒng)會不定期抓取插件視圖的快照。當插件再次可見凭峡,將會展示最近的快照拙已,直到系統(tǒng)使用視圖的實時版本取代它。

想要在抓取快照前更新插件的狀態(tài)摧冀,那要確保遵照 NCWidgetProviding 協(xié)議倍踪。當你的插件接收widgetPerformUpdateWithCompletionHandler: 調用時使用最近的內容更新插件視圖系宫,并調用completion handler(完成處理程序),使用以下常量來描述更新結果:

NCUpdateResultNewData—新內容要求你重繪view
NCUpdateResultNoData—插件不要求更新
NCUpdateResultFailed—在更新期間發(fā)生錯誤

指定插件應該在何時出現
如果你的插件只應該在某種環(huán)境下進行展示建车,比如當它有新內容或者值得關注的內容進行展示時扩借,你可以使用NCWidgetController API來指定插件應該在何時出現。

插件與其 containing app 可使用 setHasContent:forWidgetWithBundleIdentifier:方法來設置插件內容的當前狀態(tài)缤至。即使插件沒有運行往枷,Containing app也可以使用這個API。

注意:如果沒有內容可供展示凄杯,那么插件會隱藏自身错洁。通知中心將不會再次打開你的插件直到containing app指定插件應該被展示。

打開Containing App
在某些情況下戒突,插件請求containing app打開是有意義的屯碴。比如,在OS X中膊存,當用戶點擊日歷插件中的事件時會打開日歷應用导而。(在iOS中,用戶可能需要在containing app打開之前解鎖設備)在用戶當前任務上下文環(huán)境中隔崎,為了確保containing app能以用戶理解的方式打開今艺,你需要定義一個能在app和它的插件中都能使用的URL scheme。

插件不能直接通知其containing app打開爵卒,它使用NSExtensionContext的openURL:completionHandler:方法通知系統(tǒng)去打開其containing app虚缎。當插件使用該方法打開URL,系統(tǒng)會在使用它之前確認請求钓株。

支持可編輯(僅適用于OS X)
想要在 OS X 插件中支持編輯模式实牡,需要遵照 NCWidgetProviding 協(xié)議。當你把 widgetAllowsEditing 屬性設置為YES轴合,Info按鈕會自動展示在插件的頭部區(qū)域创坞。(當用戶點擊Info按鈕,它會自動切換至 Done 按鈕受葛。)使用 NCWidgetProviding協(xié)議來支持可編輯题涨,當視圖進入編輯模式時,編輯总滩、完成和取消按鈕會自動被提供纲堵。

為了觀察插件中編輯和非編輯模式之間的變化,你可以使用 NCWidgetProviding 協(xié)議的widgetDidBeginEditing 和 widgetDidEndEditing 方法咳秉。

如果你還想在用戶編輯插件時展示一個模態(tài)搜索UI婉支,可使用NSViewController的NCWidgetProvidingPresentationStyles 類別來模態(tài)彈出搜索視圖控制器鸯隅。當用戶表明他們進行搜索時澜建,可使用dismissViewControllerAnimated:completion:方法來解除搜索視圖控制器向挖。(注意你也可以使用presentViewControllerInWidget:方法來展示一個在頭部區(qū)域有取消按鈕的非搜索模態(tài)視圖)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市炕舵,隨后出現的幾起案子何之,更是在濱河造成了極大的恐慌,老刑警劉巖咽筋,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件溶推,死亡現場離奇詭異,居然都是意外死亡奸攻,警方通過查閱死者的電腦和手機蒜危,發(fā)現死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來睹耐,“玉大人辐赞,你說我怎么就攤上這事∠跹担” “怎么了响委?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長窖梁。 經常有香客問我赘风,道長,這世上最難降的妖魔是什么纵刘? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任邀窃,我火速辦了婚禮,結果婚禮上假哎,老公的妹妹穿的比我還像新娘蛔翅。我一直安慰自己,他們只是感情好位谋,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布山析。 她就那樣靜靜地躺著,像睡著了一般掏父。 火紅的嫁衣襯著肌膚如雪笋轨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天赊淑,我揣著相機與錄音爵政,去河邊找鬼。 笑死陶缺,一個胖子當著我的面吹牛钾挟,可吹牛的內容都是我干的。 我是一名探鬼主播饱岸,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼掺出,長吁一口氣:“原來是場噩夢啊……” “哼徽千!你這毒婦竟也來了?” 一聲冷哼從身側響起汤锨,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤双抽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后闲礼,有當地人在樹林里發(fā)現了一具尸體牍汹,經...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年柬泽,在試婚紗的時候發(fā)現自己被綠了慎菲。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡锨并,死狀恐怖钧嘶,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情琳疏,我是刑警寧澤有决,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站空盼,受9級特大地震影響书幕,放射性物質發(fā)生泄漏。R本人自食惡果不足惜揽趾,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一台汇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧篱瞎,春花似錦苟呐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至澄者,卻和暖如春笆呆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背粱挡。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工赠幕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人询筏。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓榕堰,卻偏偏與公主長得像,于是被迫代替她去往敵國和親嫌套。 傳聞我的和親對象是個殘疾皇子逆屡,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內容

  • 發(fā)現 關注 消息 iOS 第三方庫圾旨、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,105評論 4 62
  • 最近勇蝙,看方中信沫勿,廖啟智《律政強人》里商界斗法奇招迭出,人物塑造張弛有力味混,很是過癮产雹。方中信飾演的大狀有魄力,有手段翁锡,...
    煜麒閱讀 515評論 0 0
  • 婚姻情感語錄:沒有不幸的婚姻馆衔,只有不幸的夫妻瘟判。一對對夫妻懷著對婚姻的無比美好的憧憬走入婚姻的殿堂,可最終他們卻失望...
    432c57ca314e閱讀 388評論 0 1
  • 沒想到前幾日的文章還會有評論角溃,真是讓我受寵若驚拷获。但是原諒我不再一一回復了。 今天和大長腿小姐講到張愛玲减细,我?guī)缀跻呀?..
    獨木Atree閱讀 485評論 0 5
  • end() 方法結束當前鏈條中的最近的篩選操作匆瓜,并將匹配元素集還原為之前的狀態(tài)。 主要是在利用 jQuery 的鏈...
    尤樊容閱讀 367評論 1 1