xcode7是支持3D Touch开发的,可是模拟器并不支持这个手势,我们只能在真机上进行学习与测试,但是github上有人为我们提供了这样的一个插件,可以让我们在模拟器上进行3D Touch的效果测试:
地址: https://github.com/DeskConnect/SBShortcutMenuSimulator
经过测试,在Simulator9.2上无法运行。解决方法是在Xcode里面下载Simulator9.1,使用这个版本的模拟器, SBShortcutMenuSimulator 插件能正常使用。
操作方法github项目中有教程
依次运行以下指令
git clone https://github.com/DeskConnect/SBShortcutMenuSimulator.git cd SBShortcutMenuSimulator make
如果电脑中有多个Xcode版本,先做如下操作,如果只有一个版本的xcode,则可以跳过
sudo xcode-select -switch /Applications/XcodeVersion.app/Contents/Developer/
上面命令中,XcodeVersion.app是你电脑中Xcode的名字,这里如要特别注意,如果名字中有空格,需要修改一下,把空格去掉,否则会影响命令的执行。
保持Simulator打开,然后运行如下命令
此时是连接这上述命令的,也就是说下列命令需要你进入到 SBShortcutMenuSimulator 目录中执行
xcrun simctl spawn booted launchctl debug system/com.apple.SpringBoard --environment DYLD_INSERT_LIBRARIES=$PWD/SBShortcutMenuSimulator.dylib xcrun simctl spawn booted launchctl stop com.apple.SpringBoard
每次重新打开Simulator的时候,上述命令都要重新执行一次
如果没有报错,我们可以通过向指定端口发送消息的方法来在模拟器上模拟3D Touch的效果
echo 'com.apple.mobilecal' | nc 127.0.0.1 8000
其中,com.apple.mobilecal是应用的Bundle ID ,如果要测试我们的应用,将其改为我们应用的BundleID即可
效果:
换成自己的 Bundle ID 后:
Home Screen Quick Action使用与相关api详解
iOS9为我们提供了两种屏幕标签,分别是静态标签和动态标签。
1、静态标签
必填项(下面两个键值是必须设置的):
UIApplicationShortcutItemType 这个键值设置一个快捷通道类型的字符串
UIApplicationShortcutItemTitle 这个键值设置标签的标题
选填项(下面这些键值不是必须设置的):
UIApplicationShortcutItemSubtitle 设置标签的副标题
UIApplicationShortcutItemIconType 设置标签Icon类型
UIApplicationShortcutItemIconFile 设置标签的Icon文件
UIApplicationShortcutItemUserInfo 设置信息字典(用于传值)
在Info.plist中添加配置如下:
2、动态标签
动态标签是我们在程序中,通过代码添加的,与之相关的类,主要有三个:
UIApplicationShortcutItem 创建3DTouch标签的类
UIMutableApplicationShortcutItem 创建可变的3DTouch标签的类
UIApplicationShortcutIcon 创建标签中图片Icon的类
代码如下:
if #available(iOS 9.0, *) { let item = UIApplicationShortcutItem(type: "", localizedTitle: "菜单选项") UIApplication.sharedApplication().shortcutItems = [item] }
几点注意:
1、快捷标签最多可以创建四个,包括静态的和动态的。
2、每个标签的题目和icon最多两行,多出的会用...省略
3、动态标签不会覆盖静态标签, 静态标签的优先级高于动态标签
3、响应标签的行为
类似推送,当我们点击标签进入应用程序时,也可以进行一些操作,我们可以看到,在applocation中增加了这样一个方法:
@available(iOS 9.0, *) optional public func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void)
当我们通过标签进入app时,就会在appdelegate中调用这样一个回调,我们可以获取shortcutItem的信息进行相关逻辑操作。
需要注意如下问题, 当app已经处于启动状态(不论在前台还是在后台), 点击标签后只会触发 performActionForShortcutItem 这个回调行为。
当app尚未启动时,点击标签会启动应用,在 didFinishLaunchingWithOptions 中, launchOptions里面会传入一个 UIApplicationLaunchOptionsShortcutItemKey,对应的value类型是 UIApplicationShortcutItem , 可以从这里获取标签操作行为
请看下面代码中的注释说明
if #available(iOS 9.0, *) { // 如果在这里就已经接收到了 3D Touch的点击事件, 返回false则不会进入 performActionForShortcutItem 流程 // 如果返回 true 则会进入到 performActionForShortcutItem // 那么可以不理会此处 直接在 performActionForShortcutItem 统一处理 if let key = launchOptions?[UIApplicationLaunchOptionsShortcutItemKey]{ return false } }