iOS 3D Touch开发

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

            }

        }

  

 

posted @ 2016-01-21 10:47  大雨不晴  阅读(712)  评论(0编辑  收藏  举报