3D Touch学习之一: 如何配置3D Touch

支持设备

  • 软件: iOS9+
  • 硬件: 6s, 6s Plus及以后版本

开发环境

Xcode7+

3D Touch可以做什么?

  • 点击icon,打开APP提供的快捷操作
  • 在APP内部,对下一级页面进行预览

三种操作模式

  • Home Screen Quick Actions
  • Peek & Pop

Home Screen Quick Actions

过去,用户可以通过点击APP icon来启动APP,现在用户可以通过按压APP的icon,触发3D Touch来获得APP启动的快速入口.当用户选择某项快捷操作后,APP会被激活或者启动,APP内部通过代理方法,来获取用户选择的快捷入口的信息.

Home Screen Quick Actions

如图,icon的3D Touch被触发时,会显示APP的快捷入口,其他的背景会做模糊处理.这些快捷入口的设置方式如下.

设置首页的快速点击

设置首页的快速点击有两种方法:

静态设置: 在Info.pilst文件中设置

在Info.plist文件中,添加数组UIApplicationShortcutItems,数组元素为Dictionary,每个字典包含快速点击的信息.在UIApplicationShortcutItems中最低可以设置4个Item,多余的部分不会被显示.

对于每个shortItem而言,可以设置的参数如下:

  • UIApplicationShortcutItemType: 必填
    用来对点击事件进行分类,处理
  • UIApplicationShortcutItemTitle: 必填
    主标题,在没有副标题时最多显示两行
  • UIApplicationShortcutItemSubtitle: 非必填
    副标题,显示在主标题下方,只可显示一行,当有副标题时,主标题最多显示一行,副标题字体大小小于主标题
  • UIApplicationShortcutItemIconType: 非必填
    系统提供的图片库内的图片
  • UIApplicationShortcutItemIconFile: 非必填
    自定义图片,填写项为bundle内的图片名或asset内的图片名,图片尺寸为 35x35p
  • UIApplicationShortcutItemUserInfo: 非必填
    内容为字典,可以自己定义,用以在点击时获得更多信息
动态设置: 通过代码设置

通过类UIApplicationShortcutItem设置每个Item的属性,属性内容同静态设置一样,最后通过UIApplication.sharedApplication().shortcutItems = [item1, item2, ...]设置

静态设置 vs. 动态设置
  • 动态设置在APP运行时生效
  • 静态设置在APP安装时生效

当静态设置的个数小于限制个数4个时,动态设置的item将会被添加,最后结果仍是最多显示4个.

Peek & Pop

在APP的UIViewController内的view可以响应3D Touch事件,操作可以被细分为三个步骤

1.验证是否可预览
2.显示预览弹窗
3.进入预览页面

验证预览

UIViewController页面,需要遵守协议UIViewControllerPreviewingDelegate,并且在想要触发3D Touch的view上进行注册

       if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {
            [self registerForPreviewingWithDelegate:self sourceView:view];
        }

执行完此步骤,在轻压制定view的时候,会在view四周进行模糊处理,效果如图.

Peek avaliable
显示预览弹窗

在预览后,继续深压,则会显示预览界面.协议实现协议方法

#pragma mark - UIViewControllerPreviewingDelegate
- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location {
    UIViewController *viewController = [UIViewController alloc] init];
    return  viewController;

}

方法内部返回的Controller即为预览界面,如图

Peek

如果想在预览界面,通过上滑进行快捷操作,可以在被预览界面,遵守协议UIViewControllerPreviewingDelegate,并实现快捷操作代理方法:

- (NSArray<id<UIPreviewActionItem>> *)previewActionItems {

    UIPreviewAction *collectItem = [UIPreviewAction actionWithTitle:collectonTitle style:UIPreviewActionStyleDestructive handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
        
    }];

    UIPreviewAction *shareItem = [UIPreviewAction actionWithTitle:@"分享" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
       
    }];

    return @[collectItem, shareItem];
}

如此配置,效果如下图

Peek quick actions

用户点击了按钮之后,预览界面消失,执行UIPreviewAction内的操作,此次预览结束.

进入预览界面

如果用户在预览窗口界面继续深按,则会进行预览界面,实现方法,在提供view的界面,通过代理方法


- (void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit {
    viewControllerToCommit.hidesBottomBarWhenPushed = YES;
    [self.navigationController pushViewController:viewControllerToCommit animated:YES];
}

进行push或者present操作.

总结

3D Touch的适配就到这了,看了这些相信你已经可以在APP内集成3D Touch了,还有一些细节,比如在预览界面出现和消失时的生命周期是如何的呢?我们下次就此进行分析.

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

推荐阅读更多精彩内容