最近有一款游戲特別的火爆,叫做Steve ,一種可以在通知中心直接玩的游戲。作者的腦洞也是非常的大,實在讓人佩服。其實實現(xiàn)起來也簡單,就是用到了iOS8新特性 app extension(Today extension),我們先來看看Steve 這圖的效果。
我打算把一個曾經(jīng)很火爆的開源游戲移植成控制中心的游戲。沒錯就是它FlappyBird 傳送門
首先我們來看以下效果。
extension 支持以下幾種
- Action 擴(kuò)展 - 點(diǎn)擊 Action 按鈕后通過判斷上下文來將內(nèi)容發(fā)送到應(yīng)用
- Today 擴(kuò)展 - 通知中心的 "Today" 的面板中添加一個 widget
- Share 擴(kuò)展 - 點(diǎn)擊分享按鈕后將網(wǎng)站或者照片通過應(yīng)用分享
- Photoshop edit 擴(kuò)展 - 編輯系統(tǒng)照片的擴(kuò)展
- Document 擴(kuò)展 - 提供和管理文件內(nèi)容
- Custom Keyboard - 替代系統(tǒng)鍵盤的擴(kuò)展自定義鍵盤或輸入法
我們需要 創(chuàng)建Today extension,,today extension 就是在下拉通知欄下面添加應(yīng)用擴(kuò)展。如下圖所示。
1. 新建工程
創(chuàng)建工程。
2. 新建一個Today Extension targets ,如下圖所示
可以看到工程中多了擴(kuò)展項目,擴(kuò)展項目下有一個MainInterface.storyboard ,這個 .storyboard的就是要展示在Today 通知中心的內(nèi)容(突然感覺整個世界都清晰了,直接在這個ViewController放內(nèi)容就行了嘛)。擴(kuò)展項目編譯后,會生成一個.appex后綴的包文件,這個是獨(dú)立于主工程的擴(kuò)展應(yīng)用。可以理解為兩個應(yīng)用,因為沙盒機(jī)制數(shù)據(jù)不能交互。
如果需要擴(kuò)展和主應(yīng)用進(jìn)行數(shù)據(jù)的交互,我們需要創(chuàng)建一個共享的數(shù)據(jù)區(qū)域,我們在Capabilities 勾選 App groups 功能,并且創(chuàng)建一個app group(注意這個操作需要在主Target 和 extension Target 都需要構(gòu)想,并且使用同一個app group), 這樣就可以進(jìn)行數(shù)據(jù)的交互了,具體操作如下所示
//設(shè)置共享的數(shù)據(jù) 在主 target里面
let shareUserdefault = NSUserDefaults(suiteName:"group.comtomNC") // name 填寫 剛剛創(chuàng)建 App Group
shareUserdefault?.setObject("pass this value to extension", forKey: "shareValue")
// 在extension target里面獲取 數(shù)據(jù)
let shareUserdefault = NSUserDefaults(suiteName:"group.comtomNC") // name 填寫 剛剛創(chuàng)建 App Group
shareUserdefault?.objectForKey("shareValue") //獲得這個數(shù)據(jù)
然后我們下載 一個開源的FlappyBird,把必要的工程文件和資源拷入到 擴(kuò)展工程中。
然后我們需要把 MainInterface.storyboard的rootViewController類改為,F(xiàn)lappySwift 工程的rootViewController(也就是 GameviewController 這個類), 還有一點(diǎn)需要注意,要把ViewController.view 屬性設(shè)置為 SKView 如下圖所示
然后我們來編譯運(yùn)行,擼起,直接上效果圖(可以看到技術(shù)還是可以的。注意在真機(jī)上運(yùn)行的時候 會出現(xiàn)內(nèi)存不足的問題,跑不起來,現(xiàn)在只能在模擬器運(yùn)行,具體today extension 支持最大內(nèi)存多少我沒具體測過,以后有機(jī)會再補(bǔ)充吧) 大家可以點(diǎn)擊這里獲得 DEMO 連接
參考資料
notification today widget 參考文章 喵神這一篇文章更加詳細(xì)的介紹了 Notification today widget