ios开发3D touch

1.模拟器touch 效果git下载连接:https://github.com/DeskConnect/SBShortcutMenuSimulator

前一阵子伴随着苹果发布新产品iPhone6s 和 IOS9新系统,一系列关于硬件和软件的新功能、新特性逐渐进入iPhone用户的视线。这次我们就来讲讲传闻已久的3D Touch。        当然这个新功能不仅仅需要手机系统更新到最新的IOS9系统,更需要设备必须是iPhone6s及以上。哈哈哈。。。所以,这个功能目前也只能是iPhone6s的用户才能体验到。总的来说苹果推出3D Touch这个功能的目的和去年推出IOS8的时候推出扩展today的目的是一样:增加APP的快捷入口,方便和简化用户进入APP相应功能的路径,让用户更快的找到自己需要的应用功能。苹果官方文档对3D Touch的说明是这样的:

[plain] view plain copy

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

2.  

 3. 1、A user can now press your Home screen icon to immediately access functionality provided by your app.

  4. 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功能。

[objc] view plain copy

1. @class UIApplicationShortcutItem;  

2. @interface UIApplication (UIShortcutItems)  

3. // Register shortcuts to display on the home screen, or retrieve currently registered shortcuts. 

 4. @property (nullable, nonatomic, copy) NSArray*shortcutItems NS_AVAILABLE_IOS(9_0) __TVOS_PROHIBITED;

5. @end

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

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

[objc] view plain copy

1. // Called when the user activates your application by selecting a shortcut on the home screen,

2. // except when -application:willFinishLaunchingWithOptions: or -application:didFinishLaunchingWithOptions returns NO.

3. - (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void(^)(BOOL succeeded))completionHandler NS_AVAILABLE_IOS(9_0) __TVOS_PROHIBITED;

具体的代码实现:

[objc] view plain copy

 - (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;

 }

[objc] view plain copy

 #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文件中配置的标签,只要设置好对应的标签和键值对就没问题。


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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,757评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,478评论 1 289
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,540评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,593评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,903评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,329评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,659评论 2 309
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,383评论 0 195
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,055评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,337评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,864评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,227评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,820评论 3 231
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,999评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,750评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,365评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,260评论 2 258

推荐阅读更多精彩内容

  • 一:主屏幕按压应用图标展示快捷选项 注意:应用最多有4个快捷选项标签。 1.静态标签 1-打开项目的plist文...
    疯狂小鱼人阅读 663评论 0 1
  • 专著:http://www.jianshu.com/p/3443a3b27b2d 1.简单的介绍一下3D Touc...
    violafa阅读 955评论 1 0
  • 3D Touch介绍 从iPhone 6s开始,产品都添加了一项硬件属性,叫做3D touch。作为屏幕的一部分,...
    歪笔书生_阅读 577评论 0 0
  • 3D Touch 概述: 从.Net转来也快有半年之多了,从小生到现在也算是经历了无所bug了,不过还是打到不了I...
    LitterL阅读 638评论 8 1
  • 这就是 iOS SpringBoard 上用力点按 App Icon 弹出的快捷操作菜单了。此类菜单分为两类,静态...
    请叫我周小帅阅读 743评论 0 1