iOS 9 —3D Touch体验
3D Touch是iOS 9的新特性,趁着6s到手了,赶紧体验了一把,确实方便了不少,今天我就简单的介绍一下。
简单的说3D Touch就是通过区分轻按和重按来进行不同的用户交互。Xcode 7才支持3D Touch的开发,但是这个手势并不支持模拟器,还好在github
上找到了一个插件,可以在模拟器上模拟3D Touch的功能。插件的使用在github
有上明确的教程,这里就不叙述了。
在苹果的开发者官网上我们可以3D Touch的链接:https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/Adopting3DTouchOniPhone/
介绍
3D Touch的主要应用分为三个模块:
1、 Home Screen Quick Actions
通过主屏幕的应用icon,我们可以用3D Touch呼出一个菜单,进行快速定位应用功能模块相关功能的开发。比如下图中的邮件:
2.Peek and Pop
这个功能是一套全新的用户交互机制,在使用3D Touch时,我们可以预览下一个页面的视图,并且可以进行简单的操作。如下图:
3.Force Properties
iOS9为我们提供了一个新的交互参数:力度。我们可以检测某一交互的力度值,来做相应的交互处理。例如,我们可以通过力度来控制快进的快慢,音量增加的快慢等。
实现
1.Home Screen Quick Actions分为静态和动态。静态的只需要在我们项目中的plist文件中配置,然后用户安装就可以使用了,具体的配置信息如下图:
对应的plist文件的源码:
1 | <?xml version="1.0" encoding="UTF-8"?> |
运行结果如下图:
另外一种就是动态的,动态需要我们使用代码来创建,具体使用到的类是UIApplicationShortcutItem
,我们可以进入UIApplicationShortcutItem.h
文件中包含的东西:
主要包含了三个类:
UIApplicationShortcutIcon
:创建ShortcutItem中图片icon的类UIApplicationShortcutItem
:创建3D Touch的ShortcutItem的类UIMutableApplicationShortcutItem
:创建可变3D Touch的ShortcutItem的类
因为这是ios 9新出来的API,所以并不是很复杂,我们来直接使用:
UIApplicationShortcutItem *shareItem = [[UIApplicationShortcutItem alloc] initWithType:@"Share" localizedTitle:@"分享" localizedSubtitle:nil icon:[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeShare] userInfo:nil];
上述代码我们就用代码创建了一个3D Touch的条目,然后赋值给application.shortcutItems
即可,运行如下图:
值得提出的是Home Screen Quick Actions最多只能创建四个,多了就不会在显示了。点击每个ShortcutItem
的处理在UIApplication
中的,如下:
1 | - (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void(^)(BOOL succeeded))completionHandler |
然后我们可以针对不用的点击事件做不同的处理。
2.Peek and Pop
首先我们来看一下效果:
这就是 3D Touch另外一个使用的案例。下面我们来说一下具体的实现。
要想在APP中使用3D Touch,首先我们需要判断该设备是否开启3d touch功能,因为用户可以在’设置-通用-辅助功能-3D Touch’中来开启关闭3D Touch功能。幸好这个功能是苹果默认开启的,使用之前我们需要在使用到的ViewController
中手动判断一下:
1 | if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) { |
[self registerForPreviewingWithDelegate:self sourceView:self.preBt];
就是将self.preBt
这个视图注册允许使用3D Touch功能。然后我们还需要使用到一个协议UIViewControllerPreviewingDelegate
,这个协议中有两个方法:
1 | - (nullable UIViewController *)previewingContext:(id <UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location NS_AVAILABLE_IOS(9_0); |
这两个方法都必须实现,缺一不可,具体的实现过程如下:
1 | - (nullable UIViewController *)previewingContext:(id <UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location |
最后在我们的目标控制器PreViewController
中,可以实现- (NSArray<id<UIPreviewActionItem>> *)previewActionItems
,也可以不实现,不实现则没有ActionItem
。本文Demo