在通知欄上玩遊戲,Steve iOS 遊戲實現思路

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

clipboard.png

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

extension 支持如下幾種github

clipboard.png

  • Action 擴展 - 點擊 Action 按鈕後經過判斷上下文來將內容發送到應用app

  • Today 擴展 - 通知中心的 "Today"的面板中添加一個 widget網站

  • Share 擴展 - 點擊分享按鈕後將網站或者照片經過應用分享ui

  • Photoshop edit 擴展 - 編輯系統照片的擴展this

  • Document 擴展 - 提供和管理文件內容spa

  • Custom Keyboard - 替代系統鍵盤的擴展自定義鍵盤或輸入法code

咱們須要 建立Today extension,,today extension 就是在下拉通知欄下面添加應用擴展。以下圖所示。blog

clipboard.png

1. 新建工程

建立工程。

2. 新建一個Today Extension targets ,以下圖所示

clipboard.png

能夠看到工程中多了擴展項目,擴展項目下有一個MainInterface.storyboard ,這個 .storyboard的就是要展現在Today 通知中心的內容(忽然感受整個世界都清晰了,直接在這個ViewController放內容就好了嘛)。擴展項目編譯後,會生成一個.appex後綴的包文件,這個是獨立於主工程的擴展應用。能夠理解爲兩個應用,由於沙盒機制數據不能交互。

若是須要擴展和主應用進行數據的交互,咱們須要建立一個共享的數據區域,咱們在Capabilities 勾選 App groups 功能,而且建立一個app group(注意這個操做須要在主Target 和 extension Target 都須要構想,而且使用同一個app group), 這樣就能夠進行數據的交互了,具體操做以下所示

clipboard.png

//設置共享的數據 在主 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

相關文章
相關標籤/搜索