在通知栏上玩游戏,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

相关文章
相关标签/搜索