iOS9新特性の3D-touch-上篇

iPhone6s&iPhone 6s plus发布也有一段时间了,最大的亮点应该就是3D-touch毋庸置疑了,第一时间体验了之后最大的感受就是苹果爸爸太给力了.......事实上我也从未见过第二家公司能把科技与易用性结合的如此天衣无缝的,当年5s指纹识别如此,今年的3D-touch亦如此.苹果也开放了相关的api,作为一个开发者怎能不第一时间在自己的应用上面集成这个好玩的特性呢.

应用中使用3Dtouch有两种方式:

  • 第一种是按压图标启动应用的时候,类似于pc上面的右键,但是又不同于右键,我们可以把它理解为一个快速入口,能够有效的减少用户的操作量.这里我们只能使用轻按手势shortCut.
  • 第二种则是应用内的集成了,比如短信列表我们可以轻按预览短信内容,发现感兴趣的话再稍微用力进入详情页面,事实上目前大多数集成了3Dtouch的app也大多数是应用在这个使用场景,即在list-detail之间加了一层预览,变成了list-preview-detail.

上篇先写一下第一种场景如何集成.
这时候我们的所有代码都是在app delegate里面完成的,当然我们也可以写一个分类方便给app delegate瘦身.

在app delegate的代理方法didFinishLaunchingWithOptions里面做如下操作:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    
    ///setup icons
    UIApplicationShortcutIcon *icon1 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeCompose];
    UIApplicationShortcutIcon *icon2 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeLocation];
    UIApplicationShortcutIcon *icon3 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypePause];
    UIApplicationShortcutIcon *icon4 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"favicon.png"];
    
    ///setup items
    UIMutableApplicationShortcutItem *item1 = [[UIMutableApplicationShortcutItem alloc] initWithType:@"first" localizedTitle:@"first item title" localizedSubtitle:@"first item detail title" icon:icon1 userInfo:nil];
    UIMutableApplicationShortcutItem *item2 = [[UIMutableApplicationShortcutItem alloc] initWithType:@"second" localizedTitle:@"second item title" localizedSubtitle:@"second item detail title" icon:icon2 userInfo:nil];
    UIMutableApplicationShortcutItem *item3 = [[UIMutableApplicationShortcutItem alloc] initWithType:@"third" localizedTitle:@"third item title" localizedSubtitle:@"third item detail title" icon:icon3 userInfo:nil];
    UIMutableApplicationShortcutItem *item4 = [[UIMutableApplicationShortcutItem alloc] initWithType:@"forth" localizedTitle:@"forth item title" localizedSubtitle:@"forth item detail title" icon:icon4 userInfo:nil];
    
    NSArray *items = @[item1,item2,item3,item4];
    
    [UIApplication sharedApplication].shortcutItems = items ;
    
    
    UIApplicationShortcutItem *item = [launchOptions valueForKey:UIApplicationLaunchOptionsShortcutItemKey];
    if (item) {
        NSLog(@"3d launch item is %@",item.localizedTitle);
    }else{
        NSLog(@"normal launch");
    }
    
    return YES;
}

代码还是非常简单的,就是创建四个图标,然后创建四个item,然后给shortcutItems赋值一个数组就可以了.
需要注意的是,使用了iconWithTemplateImageName方法创建的自定义的图标需要是正方形,单色,而且35*35point尺寸的,不然会显示下面效果图那种黑漆漆的效果.

Icons should be square, single color, and 35x35 points

而我们如果想监听是从哪个item启动的应用,可以在以下方法里面操作:

- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler
{
    NSLog(@"selected item's title is %@",shortcutItem.description);
}

可以看到打印信息:

6.jpg

所以这里我们就可以通过shortcutItem.type来判断从哪个入口进入的了,所以我们在调用- (instancetype _Nonnull)initWithType:(NSString * _Nonnull)type localizedTitle:(NSString * _Nonnull)localizedTitle localizedSubtitle:(NSString * _Nullable)localizedSubtitle icon:(UIApplicationShortcutIcon * _Nullable)icon userInfo:(NSDictionary * _Nullable)userInfo初始化item的时候,可以自定义一个枚举来作为type参数,方便以后判断.

最终效果如下:

7.jpg

你可以在这里下载这个demo

一个问题:
微信实现的图标居右是如何实现的呢?因为没有找到相关的api,难道是通过runtime来修改title跟icon的frame来做到的?

好傻逼的问题,突然发现图片左右是取决于图标在屏幕上的问题........草草草草草

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

推荐阅读更多精彩内容

  • 一、主屏幕快速选项(Home Screen Quick Actions) 主屏幕快速选项就是指在主屏幕上按压应用i...
    wxlan阅读 871评论 1 1
  • 1. 3D Touch的主要应用 官方文档给出的应用介绍主要有两块: 1.A user can now press...
    DestinyFighter_阅读 18,703评论 5 50
  • 专著:http://www.jianshu.com/p/3443a3b27b2d 1.简单的介绍一下3D Touc...
    violafa阅读 1,015评论 1 0
  • 系列:iOS开发-单例模式 在我们做开发的时候经常会遇到需要在很多地方调用同一个对象的现象,比如在一个类中,我们可...
    spicyShrimp阅读 376评论 0 3
  • 说来也巧,这个端午节是我工作一来第一次过节期间回家(除了春节)。工作不允许也好,没时间也好,更多的是。。。是一种一...
    LoenTusi阅读 173评论 0 0