iOS开发 3D-touch使用

原创 2015年12月07日 17:02:58
3D Touch的触控技术,被苹果称为新一代多点触控技术3D Touch,苹果iPhone 6s的新功能,看起来类似 PC 上的右键。有Peek Pop 两种新手势。iOS 9提供了如下3D Touch APIs:

  1. Home Screen quick action API,使你可以给应用图标添加快速选项,从而让应用预料和加速其与APP的交互。
  2. UIKit peek and pop API,可让你在应用中为用户提供快速访问更多内容的功能,而无需离开当前上下文环境。使用peek quick actions的API提供的按压功能来替换你应用的触摸长按操作。
  3. Web view peek and pop API,让你使用系统提供的HTML链接预览功能。
  4. UITouch force properties,让你在应用增加自定义的基于压力的用户交互。

以下是基于Home Screen quick action API(即为应用的icon添加快捷菜单)的介绍,
想为自己的app装上这种酷炫功能的小伙伴可以按着下面的方法试试。
静态添加快捷选项(Static quick actions)
只需在自己app中得plist文件中添加:UIApplicationShortcutItems 如下如图



动态快速选项(Dynamic quick actions)在用户第一次加载应用后可用(即用户如果只是安装没有启动过应用是无法显示items)。
使用 UIApplicationShortcutItemUIMutableApplicationShortcutItem 以及 UIApplicationShortcutIcon 类和相关的API来定义 动态快速选项 。使用 shortcutItems 属性来添加动态快速选项到应用共享的 UIApplication 对象中。
 ///first dynamic item
   
UIApplicationShortcutIcon *icon = [UIApplicationShortcutIconiconWithType:UIApplicationShortcutIconTypePlay];
   
UIMutableApplicationShortcutItem  *item = [[UIMutableApplicationShortcutItemalloc]initWithType:@"firstDynamicItem"localizedTitle:@"第一个dynamicItemTitle"localizedSubtitle:@"第一个dynamicItemSubtitle"icon:iconuserInfo:nil];

   
///second dynamic item
    
UIApplicationShortcutIcon *icon2 = [UIApplicationShortcutIconiconWithType:UIApplicationShortcutIconTypePause];
    
UIMutableApplicationShortcutItem  *item2 = [[UIMutableApplicationShortcutItemalloc]initWithType:@"secondDynamicItem"localizedTitle:@"第二个dynamicItemTitle"localizedSubtitle:@"第二个dynamicItemSubtitle"icon:icon2userInfo:nil];
   
    application.shortcutItems=@[item,item2];

可以发现代码与plist的属性都是一一对应的,详细的api描述大家可以自己去查看下。

属性:
UIApplicationShortcutItems :对应的item的数组。自己添加几个item到时就会显示几个(最多显示4个)
PS:目前文档中只有前7个是支持iOS9.0的后面的需要iOS9.1开始。如果手机的系统是9.0 而 设置了9.1的icon 那么到时就会无法显示
UIApplicationShortcutItemTitle : 对应文字描述
UIApplicationShortcutItemSubtitle : 详细描述
UIApplicationShortcutItemType:相当于项目中的Bundle Identifier唯一的,通过这个标示我们可以判断点相应的那一项触发相应的操作。可以如上图苹果的做法带上自己的product_bundle_identifier
Ps: 如果不设置UIApplicationShortcutItemTitle的话整个item就不会显示
UIApplicationShortcutItemUserInfo : 在apple的文档中说明这是一个选填的字典,你可以用它来设置app的版本信息。苹果在文档中有提到过当一个用户更新了一个重来没有打开过的app的时候你可以通过这个字典去除里面的版本号进行判断来对快捷菜单项的响应做一个优雅的处理
综上,必填项(下面两个键值是必须设置的):

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

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

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

UIApplicationShortcutItemSubtitle 设置标签的副标题

UIApplicationShortcutItemIconType 设置标签Icon类型

UIApplicationShortcutItemIconFile  设置标签的Icon文件

UIApplicationShortcutItemUserInfo 设置信息字典(用于传值)
updatedShortcutItems 修改快捷项
NSArray<UIApplicationShortcutItem*> *existingShortcutItems = [[UIApplicationsharedApplication]shortcutItems];
   
UIApplicationShortcutItem *anExistingShortcutItem = [existingShortcutItems objectAtIndex:1];
   
NSMutableArray <UIApplicationShortcutItem*> *updatedShortcutItems = [existingShortcutItemsmutableCopy];
   
UIMutableApplicationShortcutItem *aMutableShortcutItem = [anExistingShortcutItem mutableCopy];
    [aMutableShortcutItem
setLocalizedTitle:@"New Title"];
    [updatedShortcutItems
replaceObjectAtIndex:1withObject: aMutableShortcutItem];
    [[UIApplicationsharedApplication]setShortcutItems: updatedShortcutItems];


2、这个时候只要你添加完成,重新安装你的app,你就会发现app已经可以使用3D-touch的功能啦!
但是还是当你点击其中的item进入程序时。没有反应,然并卵~~接下来我们需要用下面的方法处理来我们这个3D Touch触发事件:
-(void)application:(UIApplication*)application performActionForShortcutItem:(UIApplicationShortcutItem*)shortcutItem completionHandler:(void(^)(BOOL))completionHandler
{
     // 在此处完成点击item处理

}

这里有一点需要注意:我们在app的入口函数:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
     /// 在启动时判断时正常启动的还是有快捷菜单启动做出相应处理
     UIApplicationShortcutItem *item = [launchOptions valueForKey:UIApplicationLaunchOptionsShortcutItemKey];
if (item) 
{
     NSLog(@"We've launched from shortcut item: %@", item.localizedTitle);
}
else
{
 NSLog(@"We've launched properly.");  
}
}
也需要进行一下判断,在launchOptions中有UIApplicationLaunchOptionsShortcutItemKey这样一个键,通过它,我们可以区别是否是从标签进入的app,如果是则处理结束逻辑后,返回NO,防止处理逻辑被反复回调。 

版权声明:本文为博主原创文章,未经博主允许不得转载。

3D-Touch介绍与细节实现&App架构配合总结

iOS9,新的iPhone提供新的用户交互方式—3D touch。调研说明3D–Touch相关功能,以及具体实现方式。以及架构目前需要支持的TODO 3D touch主要依赖于iPhone6S和iPh...
  • bjtufang
  • bjtufang
  • 2015年10月08日 01:05
  • 1186

3D-Touch快速启动APP,并push到指定VC以及无限压栈的问题

3D-Touch快速启动应用,并push到指定页面,我并不怎么用这个,昨天从朋友那听说无限压栈的问题,我才试了试,其实情况是这样的:以 企鹅 举例, 点击”扫一扫“,进入扫码页面,然后回到桌面,...
  • u010731949
  • u010731949
  • 2016年09月08日 15:28
  • 630

MyBatis -- 一步步教你使用MyBatis

1、建立开发环境 1.1  创建项目,java项目或者javaweb项目均可,如图: 1.2  添加所需要的jar包到项目lib目录下 一个MyBatis-3.2.4.jar包 一个驱动包...
  • u014034854
  • u014034854
  • 2015年08月05日 21:19
  • 3635

Nginx基本使用方法

Windows下Nginx+Tomcat整合的安装与配置
  • liuhailiuhai12
  • liuhailiuhai12
  • 2017年07月12日 13:52
  • 4148

MATLAB使用入门

作者:朱金灿来源:http://blog.csdn.net/clever101            初步学习了MATLAB的使用,发现MATLAB是一个很好的算法仿真工具。MATLAB也是一门语言,...
  • clever101
  • clever101
  • 2013年12月18日 14:00
  • 3348

GreenDao框架使用教程

github地址:https://github.com/greenrobot/greenDAO 1、首先建立一个java工程的Generator,注意是java工程不是android工程。导入free...
  • LuckChouDog
  • LuckChouDog
  • 2016年04月28日 16:27
  • 2629

matplotlib的基本使用方法

原文 使用python的科学计算库,达到快速计算的效果。标准的Python中用列表(list)保存一组值,可以当作数组使用。但由于列表的元素可以是任何对象,因此列表中保存的是对象的指针。这样一来,为...
  • u010602026
  • u010602026
  • 2017年03月30日 08:19
  • 2362

Endnote 基本使用教程

Endnote 使用教程一、 安装百度网盘:http://pan.baidu.com/s/1eSyufL4二、 使用教程1. 查找文献:从各大期刊检索网站上面选择需要的文献,使用endnote格式...
  • u012878602
  • u012878602
  • 2016年12月28日 14:41
  • 6468

freemarker的学习和使用

freemarker是一款模板引擎,它实现程序逻辑和页面设计的分离,完成静态文本的输出。它不是web开发框架,准确来说,它仅仅只是我们MVC开发下,视图层的一个组件而已。...
  • siqilou
  • siqilou
  • 2015年03月16日 20:00
  • 2707

log4j使用教程详解(怎么使用log4j2)

1. 去官方下载log4j 2,导入jar包,基本上你只需要导入下面两个jar包就可以了(xx是乱七八糟的版本号): log4j-core-xx.jar log4j-api-xx.jar ...
  • moonpure
  • moonpure
  • 2016年04月01日 10:22
  • 3102
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS开发 3D-touch使用
举报原因:
原因补充:

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