博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在通知栏上玩游戏,Steve iOS 游戏实现思路
阅读量:6971 次
发布时间:2019-06-27

本文共 1778 字,大约阅读时间需要 5 分钟。

最近有一款游戏特别的火爆,叫做Steve ,一种可以在通知中心直接玩的游戏。作者的脑洞也是非常的大,实在让人佩服。其实实现起来也简单,就是用到了iOS8新特性 app extension(Today extension),我们先来看看Steve 这图的效果。

 

我打算把一个曾经很火爆的开源游戏移植成控制中心的游戏。没错就是它

首先我们来看以下效果。

 
flappybirdNC.gif

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")  //获得这个数据

然后我们下载 一个开源的,把必要的工程文件和资源拷入到 扩展工程中。

然后我们需要把 MainInterface.storyboard的rootViewController类改为,FlappySwift 工程的rootViewController(也就是 GameviewController 这个类), 还有一点需要注意,要把ViewController.view 属性设置为 SKView 如下图所示

 

然后我们来编译运行,撸起,直接上效果图(可以看到技术还是可以的。注意在真机上运行的时候 会出现内存不足的问题,跑不起来,现在只能在模拟器运行,具体today extension 支持最大内存多少我没具体测过,以后有机会再补充吧) 大家可以点击这里获得 

flappybirdNC.gif

参考资料

 喵神这一篇文章更加详细的介绍了 Notification today widget

作者: HuminiOS-极光

原文: 

posted on
2017-05-15 16:17 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/yezuhui/p/6856934.html

你可能感兴趣的文章
Day8 Servlet
查看>>
iOS 集成Protobuf,转换proto文件
查看>>
ZooKeeper伪集群环境搭建
查看>>
[Chromium]怎样安全的使用PostTask
查看>>
python 合并字典,相同 key 的 value 如何相加?
查看>>
Android开发之深入理解Android Studio构建文件build.gradle配置
查看>>
Martini源码剖析
查看>>
【spring boot】【log4jdbc】使用log4jdbc打印mybatis的sql和Jpa的sql语句运行情况
查看>>
BZOJ3265: 志愿者招募加强版(线性规划)
查看>>
Java提高:采用异常链传递异常
查看>>
SQL Server中LIKE %search_string% 走索引查找(Index Seek)浅析
查看>>
在WPF中制作正圆形公章
查看>>
dataframe 合并(append, merge, concat)
查看>>
几种常用网络传输协议
查看>>
Http请求头和响应头
查看>>
画鬼最易
查看>>
如何恢复Windows“消失”的磁盘分区
查看>>
从工作流产品想到软件开发过程
查看>>
发布一个WM文件浏览器--foxBrowser (Specialized for SmartPhone)
查看>>
色拉英语第3集第3幕:Bottoms up
查看>>