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,防止处理逻辑被反复回调。 

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yuwuchaio/article/details/50208125

3D-Touch

苹果在iPhone6s和iPhone6s Plus中加入了3D Touch技术
  • Goyakod
  • Goyakod
  • 2016-05-16 22:19:38
  • 194

iOS 3D Touch开发tableview页面内的使用

上一次写了3DTouch在app icon的使用,时间隔了那么久,其实我早就写完了····就是一直忙着没时间 发表文章分享,也是对不住了~ 这篇文章讲的是3DTouch在页面内的使用  首先声明  c...
  • werctzzz
  • werctzzz
  • 2015-12-30 10:56:16
  • 1870

3DTouch综合教程OC+Swift4.0

  • 2017年10月12日 15:04
  • 73KB
  • 下载

iOS 3D-touch

  • 2016年07月23日 11:22
  • 69KB
  • 下载

AWP.iOS.UICollectionView.2nd.Edition.

  • 2017年11月19日 23:53
  • 3.26MB
  • 下载

ios开发lua脚本的使用

  • 2014年08月10日 22:46
  • 821KB
  • 下载

iOS --- 使用runtime解决3D Touch导致UIImagePicker崩溃的问题

UIImagePickerController是iOS中自带的系统相册选择器, 使用起来非常简便. 3D Touch是iPhone 6s/6splus设备才有的特点, 在系统相册中长按一个照片, 可触...
  • icetime17
  • icetime17
  • 2016-03-20 09:06:19
  • 1433

3D-touch,小试身手

在启动页进行操作 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictiona...
  • zhirangzhjishang
  • zhirangzhjishang
  • 2016-01-04 17:04:49
  • 117

ios apprentice tutorial 1:getting started

  • 2014年09月03日 09:09
  • 22.93MB
  • 下载

手势密码解锁

  • 2015年03月31日 15:52
  • 341KB
  • 下载
收藏助手
不良信息举报
您举报文章:iOS开发 3D-touch使用
举报原因:
原因补充:

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