前提介绍:

 

– 在iOS 9中,默认3D Touch可以使用,但用户也可以在系统设置中把它关掉(Settings > General > Accessibility > 3D Touch)

– 支持3D Touch的设备目前只有 iPhone 6s 和 iPhone 6s Plus

– 支持3D Touch的最低系统为 iOS 9

– 支持3D Touch的最低版本Xcode开发工具为XCode 7

– 目前3D Touch 只能在真机设备中进行测试

 


3D Touch的三大模块

 

– Pressure Sensitivity:压力灵敏度。主要为UITouch类新增一些新属性,例如estimatedProperties(当前触摸对象估计的触摸特性),updatedProperties(当前触摸对象已经更新的触摸特性)等,新增的API,主要集中在获取X/Y坐标时的精度部分,如 – PreciseLocationInView:(当前触摸对象的坐标),- PrecisePreviousLocationInView:(当前触摸对象的前置坐标)等,UIForceTouchCapability,功能可用性检测。

– Peek and Pop:peek (预览)和 pop (详阅)为新引入的手势,主要可以让用户预览内容,甚至进行操作。分三阶段,(1)提示用户这里有3D Touch的交互,会使交互控件周围模糊(2)继续深按,会出现预览视图(3)通过视图上的交互控件进行进一步交互。

– Quick Actions:快捷菜单,完整名称是Home Screen Quick Actions,类似于电脑中的右键菜单,按压主屏幕的应用Icon,呼出的菜单,有静态、动态两种方式。

 


参考demo

GHTouchDemo :https://github.com/sally1021/GHTouchDemo,接下来通过demo做解析。


静态/动态ShortcutItem

 

– 静态方式在info.plist中进行配置

– 动态则通过UIApplicationShortcutItem等API进行代码动态处理

– 系统默认会优先展示静态的Actions。若App安装后从未打开时,则默认只会展示静态Actions,只有至少完整启动一次之后,动态Actions才会出现

– 最多可以创建四个,包括静态、动态

 

静态

 

在info.plist文件中添加一个UIApplicationShortcutItems的数组,数组中添加的元素就是对应的静态标签

1

必填项(下面两个键值是必须设置的):

UIApplicationShortcutItemType 这个键值设置一个快捷通道类型的字符串

UIApplicationShortcutItemTitle 这个键值设置标签的标题

选填项(下面这些键值不是必须设置的):

UIApplicationShortcutItemSubtitle 设置标签的副标题

UIApplicationShortcutItemIconType 设置标签Icon类型

UIApplicationShortcutItemIconFile  设置标签的Icon文件

UIApplicationShortcutItemUserInfo 设置信息字典(用于传值)

 

动态

 

1、动态Item,通过代码添加的,有三个相关的类:

– UIApplicationShortcutItem 创建3DTouch标签的类

– UIMutableApplicationShortcutItem 创建可变的3DTouch标签的类

– UIApplicationShortcutIcon 创建标签中图片Icon的类

2、application:didFinishLaunchingWithOptions:中

– 新建shortcutItem

– 判断launchOptions字典内的UIApplicationLaunchOptionsShortcutItemKey是否为空,用于区别是否是从shortCutItem进入的app,如果是则处理结束逻辑后,返回NO

快捷菜单显示效果,如下图:

IMG_0034

 


ShortcutItem的响应

 

重写appdelegate中的一个回调方法,实现shortcutitem点击事件的响应:

ViewController中接受通知,并实现gotoDetailVc方法,做各个页面跳转


peek/pop

 

1、目标UIViewController接受UIViewControllerPreviewingDelegate协议

2、注册Peek和Pop方法

3、实现Peek和Pop手势的代理方法

效果如图:

IMG_0035

 


Action

 

peek动作后,弹出ActionViewController,往上移动就会出现Action。

ActionViewController中实现previewActionItems:

效果如图:

IMG_0036

 


参考文档:

https://developer.apple.com/ios/3d-touch/