在iPhone上使用3D Touch

转载 2015年11月01日 15:33:46

3D Touch入门 

          

在iOS 9中,新iPhone将第三维度添加到了用户界面。


  • 用户现在可以用力摁下主屏按钮来快速调出应用提供的功能菜单。

  • 在应用中,用户现在可以用力摁下视图以查看更多内容的预览并且快速访问一些功能。


想查阅示例代码的话,可以下载下面的Xcode工程:



在你开始使用前,请阅读 iOS Human Interface Guidelines 中 3D Touch 一节


主屏幕快速选项


用户早已习惯了点击一个应用按钮来打开它,或者长按任何应用来编辑主屏。现在,通过按压iPhone 6s或者iPhone 6s Plus上的应用icon,用户可获得一系列的快捷选项。用户选择一个快捷选项后,将会启动或者加载应用,并且应用的 delegate 对象会接收快速选项的消息。


最棒的快速选项可预料并加速用户与应用的交互。iOS 9 SDK提供了定义静态或者动态快速选项的API,不过仅适用于使用最新iPhone机型的用户。



两种快速选项最多可以显示两行文本和一个可选的图标。


Peek和Pop


现在你可以授权应用的视图控制器来响应用户不同的按压力量。随着用户按压力量的增加,交互会出现三个阶段: ?


1. 暗示内容预览是可使用的 ?

2. 展示预览(peek),和快捷选项菜单(peek quick actions)

3. 可选的跳转到预览中的视图(pop)


当你使用 peek 和 pop 时,系统通过压力决定从哪个阶段过度至下一个。用户可以在设置>通用>辅助功能>3D Touch中进行修改。


暗示peek是可使用的


轻按后,周围内容会变得模糊,这告诉用户预览更多内容( peek )是可以使用的。

Peek


轻按,屏幕视图就会过渡到 peek,一个你设置的用来展示更多内容的视图-就像Mail app做的一样。如果用户这时结束了触碰,peek就会消失并且应用回到交互开始之前的状态。


或者这个时候,用户可以在peek界面上更用力按下来跳转到使用peek呈现的视图,这个过渡动画会使用系统提供的pop过渡。pop出来的视图会填满你应用的根视图并显示一个返航按钮可以回到交互开始的地方。(图中没有显示最后展示pop视图的阶段)

Peek快速选项


如果用户一直保持触摸,可以向上滑动Peek视图,系统会展示出你预先设置和peek关联的peek快速选项。


每一项peek快速选项都是你应用中的深度链接。当peek快速选项出现后,用户可以停止触摸而且peek会停留在屏幕中。用户可点击一个快速选项,唤出相关链接。

你同样也可以在网页视图中开启peek和pop,请参看 Web View Peek and Pop?


压力属性


在iOS 9中,UITouch类新增两个全新的属性以支持你在应用中自定义3D Touch: force 和maximumPossibleForce 。这是第一次应用在iOS设备上,这些属性可以让你侦测并响应APP接收的IEvent对象中的触摸压力。


触控压力感应有很大的动态范围,对于你的应用来说它是个浮点值。


3D Touch的辅助功能和人机界面指


为了确保你的用户能够完整使用你app的功能,请根据3D Touch是否可用来分别规划你的代码。请参看 Checking for 3D Touch Availability?


注意:3D Touch仅适用于支持3D Touch的设备上。在iOS 9中,默认3D Touch可以使用。用户可通过Settings > General > Accessibility > 3D Touch关闭该功能。


当3D Touch可用时,尽可能利用它的能力。当它不能使用时候,提供可供替代的方案比如触摸和长按。


3D Touch支持VoiceOver,想了解关于VoiceOver的内容,请查阅 Accessibility Programming Guide for iOS


想获得更多关于3D Touch的重要指南,请查阅 iOS Human Interface Guidelines 中的 3D Touch一节。


开发环境


Xcode7支持3D Touch开发。所有Xcode的调试功能对3D Touch的新功能都是可使用的。


注意下列事项:


  • 在Xcode 7.0中,你必须在真机上调试来开发3D Touch。Xcode 7.0的模拟器不支持3D Touch。

  • 在Xcode 7.0中,你必须通过代码实现peek和pop视图控制器。Xcode7.0中的Interface Builder不提供图形支持以设置3D Touch的视图控制器转场。


请在3D Touch可使用和不可用两种情况下都测试你的应用,保证所有用户都能使用全部的功能。在一台支持3D Touch的设备上,你可以在设置>通用>辅助功能>3D Touch中关闭3D Touch。




3D Touch APIs


iOS 9提供了如下3D Touch APIs:


  • Home Screen quick action API,使你可以给应用图标添加快速选项,从而让应用预料和加速其与APP的交互。

  • UIKit peek and pop API,可让你在应用中为用户提供快速访问更多内容的功能,而无需离开当前上下文环境。使用peek quick actions的API提供的按压功能来替换你应用的触摸长按操作。

  • Web view peek and pop API,让你使用系统提供的HTML链接预览功能。

  • UITouch force properties,让你在应用增加自定义的基于压力的用户交互。


不管你使用以上哪些APIs,你的应用必须在运行时检测3D Touch的可用性。


检测3D Touch的可用性


为了在运行时检测设别是否支持3D Touch,读取那些拥有环境特征(a trait environment,见UITraitEnvironment]Protocol Reference)的对象的特征集合(trait collection)的forceTouchCapability 属性值。由于用户在应用运行时可以关闭3D Touch,所以在你实现的traitCollectionDidChange: 代理方法中把读取这个属性的值作为其一部分。


为了确保你的用户能够完整使用你app的功能,请根据3D Touch是否可用来分别规划你的代码。当3D Touch可用时,尽可能利用它的功能。当不能使用时,提供可供替代的方案,比如由UILongPressGestureRecognizer类实现的触摸和长按。

 在自己的ViewController中增加LongPress的手势

@property (nonatomic, strong) UILongPressGestureRecognizer *longPress;

然后做个检查,如果没有就替换。

- (void)check3DTouch {
   if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {
        NSLog(@"你的手机支持3D Touch!");
        [self registerForPreviewingWithDelegate:(id)self sourceView:self.view];
        self.longPress.enabled = NO;
    }
    else {
        NSLog(@"你的手机暂不支持3D Touch!");
        self.longPress.enabled = YES;
    }
}

增加判断:

- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem
  completionHandler:(void(^)(BOOL succeeded))completionHandler{
    //判断先前我们设置的唯一标识
    if([shortcutItem.type isEqualToString:@"-11.UITouchText.share"]){
        NSArray *arr = @[@"hello 3D Touch"];
        UIActivityViewController *vc = [[UIActivityViewController alloc]initWithActivityItems:arr applicationActivities:nil];
        //设置当前的VC 为rootVC
        [self.window.rootViewController presentViewController:vc animated:YES completion:^{
        }];
    }
}


请参阅 iOS Human Interface Guidelines 来提高你对提升应用交互的理解,保证为那些使用3D Touch设备的用户带来便利的同时,也不会怠慢其他用户。


主屏快速选项


iOS 9支持主屏静态和动态快速选项。


  • 静态快速选项(Static quick actions)当用户安装完应用后立即就能使用。在应用的 Info.plist 文件中的UIApplicationShortcutItems 数组中定义 静态快速选项。




     1.修改当前应用程序的某个shortcutItem

//获取第0个shortcutItem
id oldItem = [existingShortcutItems objectAtIndex: 0];
//将旧的shortcutItem改变为可修改类型shortcutItem
id mutableItem = [oldItem mutableCopy];
//修改shortcutItem的显示标题
[mutableItem setLocalizedTitle: @“Click Lewis”];
   2.获取当前应用程序的shortcutItems
//获取当前应用程序对象
UIApplication *app = [UIApplication sharedApplication];
//获取一个应用程序对象的shortcutItem列表
id existingShortcutItems = [app shortcutItems];

3.重置当前应用程序的shortcutItems
//根据旧的shortcutItems生成可变shortcutItems数组
id updatedShortcutItems = [existingShortcutItems mutableCopy];
//修改可变shortcutItems数组中对应index下的元素为新的shortcutItem
[updatedShortcutItems replaceObjectAtIndex: 0 withObject: mutableItem];
//修改应用程序对象的shortcutItems为新的数组
[app setShortcutItems: updatedShortcutItems];



在iOS 9中,一个应用最多能展示四个主屏快速选项。在这个限制下,系统首先展示静态快速选项,以plist菜单中的第一个为首。如果你的静态选项不够四个,并且你也定义了动态快速选项,那么会展示一个或多个动态快速选项。


两种快速选项都可以显示最多两行文本和一个可选的图标。系统会格式化文本,排列包装它,并且适当的添加省略号。


主屏快速选项支持VoiceOver。


有关实现主屏快速选项的详细内容,查阅以下资料:



UIKit中的Peek 和 Pop


iOS 9让你可以通过配置视图控制器来提供peek和pop。

为了在3D Touch设备上支持peek和pop,iOS 9 SDK包括:


  • UIViewController类中增加了一系列用来注册和注销一个参与3D Touch的视图控制器的新方法。

  • 为了支持3D Touch的新视图控制器协议。


你可以有选择的配置一个包括一系列peek快速选项的预览视图控制器。用户可以通过在peek界面上滑来使用peek快速选项.


为了支持peek快速选项,iOS 9 SDK包括了:



有关实现peek和pop和实现peek快速选项的更多资料,查阅以下资料:



Web View的Peek和Pop


在web视图中,你可以对超链接和侦测到的数据使用全新的 allowsLinkPreview 属性来开启peek和pop。在iOS9中,这个属性在更被推荐使用的WKWebView类(属于WebKit framework)和较老的UIWebVIew类(属于UIKit framework)中都是可以使用的。


Peek和Pop会通过Safari Services framewrok中的SFSafariViewController类自动侦测链接和数据


UITouch对象中的压力属性


在iOS 9中,UITouch类获得了两个全新的属性帮助你在应用中自定义3D Touch: force 和maximumPossibleForce


这些属性可以让你侦测并响应APP接收的IEvent对象中的触摸压力。
在iPhone上,触控压力感应有很大的动态范围,对于你的应用来说它是个浮点值。


有关更多自定义使用压力值对3D Touch的实现,请阅读以下资料:



参考原文:http://www.cocoachina.com/ios/20151028/13849.html
http://www.jianshu.com/p/74fe6cbc542b

在iPhone上使用3D Touch

重要:这是针对于正在开发中的API或技术的预备文档(预发布版本)。苹果提供这份文档的目的是帮助你按照文中描述的方式对技术的选择及界面的设计开发进行规划。这些信息有可能发生变化,因此根据本文档的软件开发...
  • Vic__li
  • Vic__li
  • 2015-11-25 16:17:43
  • 147

在iPhone上使用3D Touch

本文由CocoaChina译者Creolophus(github主页)翻译自苹果开发者中心原文:Adopting 3D Touch on iPhone重要:这是针对于正在开发中的API或技术的预备文档...
  • reylen
  • reylen
  • 2016-04-07 09:55:17
  • 447

3Dtouch 基本原理

UIApplicationShortcutItems即用3Dtouch在app图标呼出一个菜单       实现由两种方法:静态菜单和动态菜单   静态菜单是在plist中添加,...
  • c386890506
  • c386890506
  • 2016-03-14 14:26:52
  • 1018

iOS 3D Touch使用<二、 Peek、Pop使用>

3D Touch Peek、 Pop
  • moxi_wang
  • moxi_wang
  • 2016-03-07 21:19:22
  • 492

在iPhone上使用3D Touch

重要:这是针对于正在开发中的API或技术的预备文档(预发布版本)。苹果提供这份文档的目的是帮助你按照文中描述的方式对技术的选择及界面的设计开发进行规划。这些信息有可能发生变化,因此根据本文档的软件开发...
  • Vic__li
  • Vic__li
  • 2015-11-25 16:17:43
  • 147

《iPhone 3D 编程》第一章:快速入门指南

**************************************************************************** 申明:本系列教程原稿来自网络,翻译目的仅供学...
  • favormm
  • favormm
  • 2011-10-19 16:35:13
  • 9141

在xcode模拟器上运行3Dtouch

第一步, git clone https://github.com/DeskConnect/SBShortcutMenuSimulator.git cd SBSho...
  • hurosezhang
  • hurosezhang
  • 2016-08-15 15:52:17
  • 1712

Unity3D -- 使用iOS 3DTouch功能

Unity工程在iOS平台使用3DTouch功能,完全不需要调用iOS端系统API,Unity已经提供了方法; 版本: Unity5.2.3以后的版本 方法:   void ForcePressure...
  • honey199396
  • honey199396
  • 2016-02-04 15:29:50
  • 2202

模拟器使用3D Touch功能

在模拟器上学习和测试3D Touch    3D Touch是一个很新颖的设计,可是苹果文档有言: With Xcode 7.0 you must develop on a dev...
  • jinglijun
  • jinglijun
  • 2015-12-06 16:12:20
  • 4171

IOS 实现3D Touch在tableView的简单应用

3D Touch正在改变用户的操作习惯,体验了下,确实挺酷。  做为个开发者,一定想知道如何才能集成这样操作功能。 话不多说,直接上代码(因为3D Touch的开发资料网止已经太多了,不说了) ...
  • u010277446
  • u010277446
  • 2016-03-16 10:25:33
  • 757
收藏助手
不良信息举报
您举报文章:在iPhone上使用3D Touch
举报原因:
原因补充:

(最多只允许输入30个字)