IOS 3D Touch 开发教程

原创 2016年03月02日 12:17:24

         前一阵子伴随着苹果发布新产品iPhone6s 和 IOS9新系统,一系列关于硬件和软件的新功能、新特性逐渐进入iPhone用户的视线。这次我们就来讲讲传闻已久的3D Touch。

        当然这个新功能不仅仅需要手机系统更新到最新的IOS9系统,更需要设备必须是iPhone6s及以上。哈哈哈。。。所以,这个功能目前也只能是iPhone6s的用户才能体验到。总的来说苹果推出3D Touch这个功能的目的和去年推出IOS8的时候推出扩展today的目的是一样:增加APP的快捷入口,方便和简化用户进入APP相应功能的路径,让用户更快的找到自己需要的应用功能。苹果官方文档对3D Touch的说明是这样的:

With iOS 9, new iPhone models add a third dimension to the user interface.

1、A user can now press your Home screen icon to immediately access functionality provided by your app.
2、Within your app, a user can now press views to see previews of additional content and gain accelerated access to features.
        意思大概是这样的:

      1、用户可以通过3D Touch手势,按压主屏幕上的应用Icon,可以直接进入应用的相应的功能模块。(手机桌面上APP相应模块的快捷入口)

      2、用户可以通过3D Touch手势,按压对应的视图来预览视图的更多内容。(视图信息的快速预览)

       光靠上面的文字描述确实显得很苍白抽象。那么我们来看一下国内一些主流APP对于3D Touch功能的具体应用。

      就拿QQ来说,关于第一条说明的应用场景如下图的:


        我们可以通过一定力度按压桌面上QQ应用的图标,就可以出现一个快捷操作的视图。可以快速进入“扫一扫”或者“加好友”等其他模块。

        关于第二条说明的应用场景如下图的:

                   

         在消息的列表页面,用力按压某一条对话消息,就可以预览这条对话消息的具体内容。

        看完了具体的应用场景,我们一定很好奇这个3D Touch功能到底是怎么实现?其实3D Touch的实现一点也不复杂,相对于IOS8推出的today来说简单很多,基本不需要太多的代码操作。我们可以通过两个方式来实现3D Touch。

        1、通过设置标签:在项目的info.plist文件设置相应的标签就基本上可以完成大体工作了!

        2、通过代码的方式配置3D Touch。

        那么我们先来看一下代码方式是如何实现的:

        IOS9为 UIApplication类新增了一个属性shortcutItems来统一设置和管理应用的 3D Touch功能。

@class UIApplicationShortcutItem;
@interface UIApplication (UIShortcutItems)
// Register shortcuts to display on the home screen, or retrieve currently registered shortcuts.
@property (nullable, nonatomic, copy) NSArray<UIApplicationShortcutItem *> *shortcutItems NS_AVAILABLE_IOS(9_0) __TVOS_PROHIBITED;
@end

         属性 shortcutItems是一个数组类型的数据,数组里面的数据是  UIApplicationShortcutItem类的对象。

UIApplicationShortcutItem类也是IOS9为配置3D Touch而新增的类。也许我们已经猜到了,一个UIApplicationShortcutItem对象就是在桌面长按应用Icon弹窗视图中的一个栏目。也就是上面“扫一扫”栏目的入口。同时UIApplication类还新增了一个代理方法来处理3D Touch对应的手势操作。

// Called when the user activates your application by selecting a shortcut on the home screen,
// except when -application:willFinishLaunchingWithOptions: or -application:didFinishLaunchingWithOptions returns NO.
- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void(^)(BOOL succeeded))completionHandler NS_AVAILABLE_IOS(9_0) __TVOS_PROHIBITED;

       具体的代码实现:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.

    //栏目1
    UIApplicationShortcutIcon *icon1 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeCompose];
    UIApplicationShortcutItem *item1 = [[UIApplicationShortcutItem alloc] initWithType:@"item1" localizedTitle:@"入口1" localizedSubtitle:@"入口1副标题" icon:icon1 userInfo:nil];

    //栏目2
    UIApplicationShortcutIcon *icon2 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypePlay];
    UIApplicationShortcutItem *item2 = [[UIApplicationShortcutItem alloc] initWithType:@"item2" localizedTitle:@"入口2" localizedSubtitle:@"入口2副标题" icon:icon2 userInfo:nil];
    
    //栏目3
    UIApplicationShortcutIcon *icon3 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypePause];
    UIApplicationShortcutItem *item3 = [[UIApplicationShortcutItem alloc] initWithType:@"item3" localizedTitle:@"入口3" localizedSubtitle:@"入口3副标题" icon:icon3 userInfo:nil];
    
    //栏目4
    UIApplicationShortcutIcon *icon4 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeAdd];
    UIApplicationShortcutItem *item4 = [[UIApplicationShortcutItem alloc] initWithType:@"item4" localizedTitle:@"入口4" localizedSubtitle:@"入口4副标题" icon:icon4 userInfo:nil];
    
    //设置 shortcutItems   需要注意的是shortcutItems数组最多只能加入四个item,超过四个只会显示前面的四个
    application.shortcutItems = @[item1, item2, item3, item4];    
    
    return YES;
}

 

#pragma mark -  3D Touch 代理方法
-(void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler{
    //根据Item对应的type标识处理对应的点击操作
    NSString *itemType = shortcutItem.type;
    if([@"item1" isEqualToString:itemType]){
        
    }
    else if([@"item2" isEqualToString:itemType]){
        
    }
    else if ([@"item3" isEqualToString:itemType]){
        
    }
    else if ([@"item4" isEqualToString:itemType]){
        
    }
    
}

        其中,UIApplicationShortcutIcon类就是设置每一个item项目的图标,这个图标可以是系统的图标也可以是自定义的图标。该类提供两个初始化方法来供我们选择:iconWithType:方法设置系统图标 ,iconWithTemplateImageName:方法设置自定义图标。具体的使用可以去查看该类的API。

        UIApplicationShortcutItem类中的几个属性需要说明一下。Type属性是用来标识每一个item项目的,通过这个标识我们可以区分点击相应的每一项该触发哪些操作(在3D Touch的代理方法中就是靠Type属性来区分点击的是哪一项)。localizedTitle属性是每一个item的标题。localizedSubtitle属性是每个item的副标题,这个副标题可有可无。icon属性也就是上面说的每个item对应的图标了。userInfo属性是信息字典,用于传值,这里设为空。

        需要注意的是,根据本人的试验: UIApplication类的shortcutItems数组最多只能放四个item。也就是说通过3D Touch按压桌面应用Icon弹出的操作视图,该视图里面最多只能有四个快捷入口选项。超过四个只能显示最前面的四个。

        到这里我们就通过代码的方式实现了3D Touch功能了。

       下面讲一下通过设置标签的形式实现3D Touch功能。我们只需要设置静态标签然后在UIApplication类中实现3D Touch的代理方法就可以了,静态标签是我们在项目的配置plist文件中配置的标签,只要设置好对应的标签和键值对就没问题。


        上面的代码实现的应用效果如下图:




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

iOS开发之3DTouch集成

静态添加入口标签在info.plist中添加如图所示 各项都代表的意思首先是UIApplicationShortcutItems,他是一个数组类型,数组中的每一个元素表示一个入口标签。然后是Item...
  • sinat_30162391
  • sinat_30162391
  • 2016-04-08 13:51:34
  • 1793

iOS 3D Touch开发 很良心的版本原创!

之前一直在忙着维护项目,偶然的一天闲着玩手机玩到3Dtouch,看着效果挺不错的 于是就尝试着搜索了一下相关的文案,结果除了官网给的全英文api意外国内的基本都 是互相抄袭,我搜了37篇文章,29篇相...
  • werctzzz
  • werctzzz
  • 2015-12-17 09:51:12
  • 3251

IOS实现3DTouch功能

赶需求期间,想着别人应用都搞起3DTouch功能了,咱也来装逼一会,凸显下逼格。 废话少说,先搜索了前人的热心奉献,自己再动手丰衣足食,下面归纳总结下。 首先,想要体验3DTouch功能,必须至少得是...
  • a416863220
  • a416863220
  • 2016-04-22 10:35:11
  • 9201

iOS8.0 使用Photos.framework对相册的常用操作

本篇博文将详细介绍Photos.framework在日常开发中常用的一些api对相册的各种使用方法。 自己最近抽空写了一个相册多选框架,用到对一些对相册相关的操作,使用的便是iOS8.0之后,appl...
  • longitachi
  • longitachi
  • 2015-12-01 16:15:48
  • 12461

iOS 3DTouch 开发

看了网上很多贴,但是感觉对于有些人来说太过婉转了,所以我就来个简单粗暴的 1,设置静态标签 首先要在info.plist 里面添加键值    UIApplicationShortcutItemTy...
  • pk_sir
  • pk_sir
  • 2016-03-14 10:49:15
  • 435

iOS系统3DTouch全解析

概述 iOS10系统登录中国,在系统中对3D Touch的使用需求更频繁,所以对iOS9中便引入的3D Touch功能做一些了解是很有必要的 在日常开发中,我们经常需要使用3D Touch中的两个...
  • ZY_FlyWay
  • ZY_FlyWay
  • 2017-07-14 17:02:15
  • 623

iOS新特性实现3DTouch开发

好久没有写过文章了,今天就给大家带来一篇比较简单的开发教程吧!目的是为了让大伙能够避开那些不必要的坑,快速高效的实现功能。今天呢来和大家讲一下iOS9的新特性3DTouch开发(iOS10都已经出了B...
  • shenjie12345678
  • shenjie12345678
  • 2016-07-27 11:00:09
  • 1978

Unity之使用IOS 3DTouch功能

Unity之使用IOS 3DTouch
  • qq_26999509
  • qq_26999509
  • 2017-04-26 16:53:21
  • 702

iOS 3DTouch 代码实现

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launc...
  • chenzheiu1210
  • chenzheiu1210
  • 2016-10-19 14:18:44
  • 467

ios 3D引擎 SceneKit 开发(1) --起始篇

hello ,大家好,我是Roc.Tian,最近一直在研究苹果自家的3D 引擎 SceneKit ,适当写写博客,总结一下,与大家分享一下,也希望跟大家交流,共同进步。 SceneKit 是一个O...
  • pzhtpf
  • pzhtpf
  • 2015-12-15 14:09:49
  • 18875
收藏助手
不良信息举报
您举报文章:IOS 3D Touch 开发教程
举报原因:
原因补充:

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