最近有一款遊戲特別的火爆,叫作Steve ,一種能夠在通知中心直接玩的遊戲。做者的腦洞也是很是的大,實在讓人佩服。其實實現起來也簡單,就是用到了iOS8新特性 app extension(Today extension),咱們先來看看Steve 這圖的效果。linux
我打算把一個曾經很火爆的開源遊戲移植成控制中心的遊戲。沒錯就是它FlappyBird 傳送門
首先咱們來看如下效果。
git
extension 支持如下幾種github
Action 擴展 - 點擊 Action 按鈕後經過判斷上下文來將內容發送到應用app
Today 擴展 - 通知中心的 "Today"的面板中添加一個 widget網站
Share 擴展 - 點擊分享按鈕後將網站或者照片經過應用分享ui
Photoshop edit 擴展 - 編輯系統照片的擴展this
Document 擴展 - 提供和管理文件內容spa
Custom Keyboard - 替代系統鍵盤的擴展自定義鍵盤或輸入法code
咱們須要 建立Today extension,,today extension 就是在下拉通知欄下面添加應用擴展。以下圖所示。blog
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