前几天给自家的APP加上了3D Touch.从学习到集成用了大半天的时间.(其实3D Touch so easy. 之所以用了大半天时间是因为3D Touch 的Home Screen Quick Actions 需要考虑一个问题.至于这个问题好不好解决,关键还是看你自己项目的主UI结构喽)
官方文档翻译:
搭载iOS 9 系统的新手机型号(其实就是iPhone 6S 啦)为用户提供了一个三维的交互体验.
1. 用户可以点击APP的icon来直接执行app中的方法.
2. 在app内部,用户可以预览内容和快速进行一些操作.
博主总结在进行3D Touch开发时前要遵循两个原则:
1. 在没有3D Touch的设备要用其他手势代替该功能(比如长按...).
2. 必须在运行时检测 3D Touch 是否可用,因为用户可能会随时关闭3D Touch. 具体操作和代码见这 里: http://blog.youkuaiyun.com/soindy/article/details/49904805
一 . Home Screen Quick Actions
之前用户可以轻点一个app的icon来加载它,或者长按来编辑其在屏幕的显示.现在在iPhone 6S 和iPhone 6S Plus,用户可用得带一个快捷菜单,当用户选择了一个快捷动作,你的应用程序被launch或者activate.相应的在appDelegate的代理方法中会收到该快捷动作的相关信息.
好的快捷启动是预测用户的操作,从而加速用户和app的交互. 这里有静态和动态两种快速启动方式.
1. 定义静态的快速启动只需要在app的Info.plist中定义UIApplicationShortcutItems数组即可.比如下图:
至于每个key代表的什么意思请看这里的官方文档翻译:点击打开链接
二 .Peek and Pop
你可以 enable 你app中的view controller来响应用户不同强度的按压.当用户不断用力的时候,交互分为三个阶段:
1. 指示该内容的preview是否可用.
2. 显示一个有快速选项(peek quick actions)的快速预览(peek的形式显示preview).
3. 在preview中显示的导航栏(optional). ----- pop
当你使用 peek 和 pop 的时候.系统判读这个压力的强度在哪个阶段,并且如何过渡到下一个,意思就是这个动作和动 画是苹果实现的,开发者不需要关系. 用户可以是 设置 -> 通用 -> 辅助功能 -> 3D Touch中调整peak and pop的灵 敏度.
三. Force Properties
在iOS 9 中.UITouch有2个新特性来支持你自定义3D Touch. force 和 maximumPossibleForece. 这些特性可以让你检测和反馈你app在UIEveent对象中收到的压力的大小. Force是一个float值,高动态变化.
具体代码如下:
// 如果支持3Dtouch
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9.0) { // 必须判断,否则低版本crash
if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) { // 必须动态检测
// 开启定时器发送命令
if (!_touchTimer) {
_touchTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(touchStrengthChanged) userInfo:nil repeats:YES];
}
}
- (void)touchStrengthChanged {
if (self.touchStrength.force > 0) {
NSLog(@"%d",self.touchStrength.force);
}
}
3D Touch仅在支持3D Touch的设备并且3D Touch打开的时候可用.在iOS9中3D Touch默认是打开的..用户可以在设置中将其关闭.当3D Touch可用的时候,好好的利用它的特性.而在不可用的设备要提供相对应的实现,比如实现 touch and hold(就是长按). 3D Touch也支持VoiceOver.