最近有一款游戲特別的火爆,叫做Steve ,一種可以在通知中心直接玩的游戲。作者的腦洞也是非常的大,實在讓人佩服。其實實現起來也簡單,就是用到了iOS8新特性 app extension(Today extension),我們先來看看Steve 這圖的效果。

我打算把一個曾經很火爆的開源游戲移植成控制中心的游戲。沒錯就是它FlappyBird 傳送門
首先我們來看以下效果。


extension 支持以下幾種

- Action 擴展 - 點擊 Action 按鈕后通過判斷上下文來將內容發送到應用
- Today 擴展 - 通知中心的 "Today" 的面板中添加一個 widget
- Share 擴展 - 點擊分享按鈕后將網站或者照片通過應用分享
- Photoshop edit 擴展 - 編輯系統照片的擴展
- Document 擴展 - 提供和管理文件內容
- Custom Keyboard - 替代系統鍵盤的擴展自定義鍵盤或輸入法
我們需要 創建Today extension,,today extension 就是在下拉通知欄下面添加應用擴展。如下圖所示。

1. 新建工程
創建工程。
2. 新建一個Today Extension targets ,如下圖所示

可以看到工程中多了擴展項目,擴展項目下有一個MainInterface.storyboard ,這個 .storyboard的就是要展示在Today 通知中心的內容(突然感覺整個世界都清晰了,直接在這個ViewController放內容就行了嘛)。擴展項目編譯后,會生成一個.appex后綴的包文件,這個是獨立於主工程的擴展應用。可以理解為兩個應用,因為沙盒機制數據不能交互。
如果需要擴展和主應用進行數據的交互,我們需要創建一個共享的數據區域,我們在Capabilities 勾選 App groups 功能,並且創建一個app group(注意這個操作需要在主Target 和 extension Target 都需要構想,並且使用同一個app group), 這樣就可以進行數據的交互了,具體操作如下所示

//設置共享的數據 在主 target里面 let shareUserdefault = NSUserDefaults(suiteName:"group.comtomNC") // name 填寫 剛剛創建 App Group shareUserdefault?.setObject("pass this value to extension", forKey: "shareValue")
// 在extension target里面獲取 數據 let shareUserdefault = NSUserDefaults(suiteName:"group.comtomNC") // name 填寫 剛剛創建 App Group shareUserdefault?.objectForKey("shareValue") //獲得這個數據
然后我們下載 一個開源的FlappyBird,把必要的工程文件和資源拷入到 擴展工程中。
然后我們需要把 MainInterface.storyboard的rootViewController類改為,FlappySwift 工程的rootViewController(也就是 GameviewController 這個類), 還有一點需要注意,要把ViewController.view 屬性設置為 SKView 如下圖所示

然后我們來編譯運行,擼起,直接上效果圖(可以看到技術還是可以的。注意在真機上運行的時候 會出現內存不足的問題,跑不起來,現在只能在模擬器運行,具體today extension 支持最大內存多少我沒具體測過,以后有機會再補充吧) 大家可以點擊這里獲得 DEMO 連接

參考資料
notification today widget 參考文章 喵神這一篇文章更加詳細的介紹了 Notification today widget
作者: HuminiOS-極光