iOS9,新的iPhone提供新的用户交互方式—3D touch。调研说明3D–Touch相关功能,以及具体实现方式。以及架构目前需要支持的TODO

3D touch主要依赖于iPhone6S和iPhone6S plus提供新的传感器,压力传感器。具体来说就是屏幕可以感受到手指下压屏幕的力度。

对于该新的传感器,iOS开放出主要有三个功能:

  1. Home Screen Quick Actions
  2. Peek and Pop
  3. Force Properties

下面将详细说明下,具体产品形态和实现细节

Home Screen Quick Actions

Quick actions可以让用户快速使用App提供的功能。对于UI样式,quick action可以显示两行文本和一个可选的icon。
问号1:对于展示的Quick actions的个数需要进一步实验。

iOS9 SDK提供API可以让开发者定义的功能,这些功能可以是预埋功能,也可以是动态功能。

Static Quick actions

在工程的Info.plist中加入UIApplicationShortcutItems。这个Key对应的Value是NSArray,每个Array的cell是一个字典。具体看截图

每个quick action静态配置如下:

@{UIApplicationShortcutItemTitle : Static Shortcut titleUIApplicationShortcutItemSubtitle : Static shortcut subtitleUIApplicationShortcutItemType: com.test.staticshortcutUIApplicationShortcutItmeIconFile : iCoin1
}

Dynamic quick actions

定义动态quick actions 需要使用UIApplicationShortItem类和相关系统API。

添加动态quick actions可以兼容静态quick actions,也可以完全使用最新quick actions。具体看下面两个示例代码:

  • 兼容静态quick actions
    // 创建动态quick iconsUIApplicationShortcutIcon *icon1 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"iCon1"];UIApplicationShortcutIcon *icon2 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"iCon2"];UIApplicationShortcutIcon *icon3 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"iCon3"];// 创建动态quick actions实例UIMutableApplicationShortcutItem *item1 = [[UIMutableApplicationShortcutItem alloc] initWithType:@"com.test.actions1"localizedTitle:@"title1"localizedSubtitle:@"title1 subtitle1"icon:icon1userInfo:nil];UIMutableApplicationShortcutItem *item2 = [[UIMutableApplicationShortcutItem alloc] initWithType:@"com.test.actions2"localizedTitle:@"title2"localizedSubtitle:@"title2 subtitle2"icon:icon2userInfo:nil];UIMutableApplicationShortcutItem *item3 = [[UIMutableApplicationShortcutItem alloc] initWithType:@"com.test.actions3"localizedTitle:@"title3"localizedSubtitle:@"title3 subtitle3"icon:icon3userInfo:nil];// 数组组成NSArray *items = @[item1, item2, item3];// 获取静态quick actionNSArray *existingItems = [UIApplication sharedApplication].shortcutItems;// 生成最终quick acitonsNSArray *updatedItems = [existingItems arrayByAddingObjectsFromArray:items];// 把相关quick actions实例赋值给UIApplication的shortcutItems属性[UIApplication sharedApplication].shortcutItems = updatedItems;
  • 替代静态quick actions
    // 创建动态quick actions实例UIApplicationShortcutItem *item1 = [[UIApplicationShortcutItem alloc]initWithType:@"Item 1" localizedTitle:@"Item 1"];UIApplicationShortcutItem *item2 = [[UIApplicationShortcutItem alloc]initWithType:@"Item 2" localizedTitle:@"Item 2"];UIApplicationShortcutItem *item3 = [[UIApplicationShortcutItem alloc]initWithType:@"Item 3" localizedTitle:@"Item 3"];// 数组组成NSArray *items = @[item1, item2, item3];// 把相关quick actions实例赋值给UIApplication的shortcutItems属性[UIApplication sharedApplication].shortcutItems = items;
  • Quick actions启动App

利用quick actions启动App有两种情况,A、App真正启动;B、App后台被唤醒,启动。具体如何判断,请下下列示例代码

  • App真正启动

    UIApplicationShortcutItem *item = [launchOptions valueForKey:UIApplicationLaunchOptionsShortcutItemKey];
    if (item) {NSLog(@"App启动来自用户点击 quick action: %@", item.localizedTitle);
    } else {NSLog(@"App启动来自用户点击 app icon");
    }
    • App 后台被唤醒/启动

    “`

    • (void)application:(UIApplication )application performActionForShortcutItem:(UIApplicationShortcutItem )shortcutItem completionHandler:(void (^)(BOOL))completionHandler {

    // react to shortcut item selections
    NSLog(@”A shortcut item was pressed. It was %@.”, shortcutItem.localizedTitle);

    }
    ““

  • 待实验问题

    • quick actions的显示顺序,是否按照初始化顺序显示
    • 静态actions和动态actions,最多能显示几个
    • quick actions启动流程需要实验

Peek and Pop

什么是Peek和Pop

以列表页为例子。

  • 选中指定目标view。轻按。轻按某个table view cell。轻按的cell view不变。周边的画面都变为模糊透视blurs。通过这样视觉变化,突显某个cell被选中。具体看示例图。

  • Peek。更用力。简要内容显示在屏幕中。如果用户抬起手指,相关显示view自动消失。
    具体请看示例

  • Peek quick actions。接peek,如果用户向上滑动结束手势,系统显示peek quick actions操作。每个peek quick actions操作可以通过程序设置。每个action可以进入具体业务操作。
    具体请看示例

Peek/Pop实现

为了支持peek and pop在新的苹果设备上,iOS9 SDK提供一套新API支持。

  • 注册preview view && 注销preview view

sourceView,是preview view宿主view。

@interface UIViewController (UIViewControllerPreviewingRegistration)- (id <UIViewControllerPreviewing>)registerForPreviewingWithDelegate:(id<UIViewControllerPreviewingDelegate>)delegate sourceView:(UIView *)sourceView;- (void)unregisterForPreviewingWithContext:(id <UIViewControllerPreviewing>)previewing ;
@end
  • UIViewControllerPreviewingDelegate 为 UIViewController新的delegate, 为返回新的preview view controller.

下述delegate,返回为nil,preview view将不会响应

- (nullable UIViewController *)previewingContext:(id <UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location; 

点击preview view进入相关关联的下一个页面(这里需要实验,验证下)

- (void)previewingContext:(id <UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit
  • UIPreviewAction/UIPreviewActionGroup

UIPreviewAction 描述一个Preview action行为。
UIPreviewActionGroup 是对于UIPreviewAction组的封装。这两个使用都是在UIViewController新的匿名category:- (NSArray

- (NSArray<id<UIPreviewActionItem>> *)previewActionItems {// setup a list of preview actionsUIPreviewAction *action1 = [UIPreviewAction actionWithTitle:@"Action 1" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {NSLog(@"Action 1 triggered");}];UIPreviewAction *action2 = [UIPreviewAction actionWithTitle:@"Destructive Action" style:UIPreviewActionStyleDestructive handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {NSLog(@"Destructive Action triggered");}];UIPreviewAction *action3 = [UIPreviewAction actionWithTitle:@"Selected Action" style:UIPreviewActionStyleSelected handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {NSLog(@"Selected Action triggered");}];// add them to an arraryNSArray *actions = @[action1, action2, action3];// add all actions to a groupUIPreviewActionGroup *group1 = [UIPreviewActionGroup actionGroupWithTitle:@"Action Group" style:UIPreviewActionStyleDefault actions:actions];NSArray *group = @[group1];// and return them (return the array of actions instead to see all items ungrouped)return group;
}

相关action处理方法,都被封装在UIPreviewAction初始化函数block handle参数中。

    UIPreviewAction *action = [UIPreviewAction actionWithTitle:@"Selected Action" style:UIPreviewActionStyleSelected handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {**UIPreviewAction 具体处理逻辑**}];

Force Properties

从iOS9 OS,UITouch 类中增加关于屏幕指尖压力力度的属性。该属性提供给开发者,更加有创造力的能力。

// Force of the touch, where 1.0 represents the force of an average touch
@property(nonatomic,readonly) CGFloat force NS_AVAILABLE_IOS(9_0);// Maximum possible force with this input mechanism
@property(nonatomic,readonly) CGFloat maximumPossibleForce NS_AVAILABLE_IOS(9_0);

新特性应用到App

对于3D-Touch如何融入到App架构中,在具体业务开始开发前,架构首先需要对于各种功能进行支持,方便业务快速接入。

  • Home quick acitons 架构需要支持几点。

    • launch App接入App导航架构中。
    • 支持动态和静态quick actions,与后台运营服务联通,做好home quick actions与业务&运营的桥梁
  • Peek and Pop

    • 与App目前相关UIViewController的抽象类族相关关联
    • 与App openurl页面栈处理逻辑关联
    • 做好对于低系统OS的兼容处理
  • Force Properties

    • 封装UIForceView提供给各个业务使用
  • iPad相关支持能力

  • 建议–是否可以架构首先接入3D-Touch相关功能,并且配合某个具体业务进行开发,不断优化相关的架构API功能。

3D-Touch介绍与细节实现App架构配合总结相关推荐

  1. 3D Touch介绍: 一个数字压力器App和Quick Actions

    随着iPhone 6s and 6s Plus的发布,苹果介绍了全新的手机交互方式:重按手势.你应该知道,这个特性其实早已应用在苹果手表和MacBook产品中,名字叫Force Touch.它给用户交 ...

  2. 3D Touch介绍:电子秤App与快捷操作

    随着iPhone6s与6s plus的到来,苹果给我们展现了一种全新的交互方式:重按手势.你可能知道,这个特性已经在Apple Watch和MacBook上推出了,不过那时叫Force Touch,就 ...

  3. 3D Touch开发之App 快速入口标签(快捷菜单)

    一.简介: 自从苹果公司引入了 3D Touch 功能后,众多开发者,也开在自己的app上实现自己的 3D Touch 效果,今天我也来小秀一把. 我们先来看看,3D Touch 下的 app 快速启 ...

  4. uniapp ios支持长按app 3D Touch快捷菜单项

    uniapp ios支持长按app 3D Touch快捷菜单项 uniapp 安卓 长按app 快捷方式 shortcut 一.配置manifest.json文件 切换到代码视图,uni-app项目在 ...

  5. iOS 9之3D Touch

    金田 北京时间9月10日凌晨, Apple在美国旧金山比尔格拉汉姆公民大礼堂(Bill Graham Civic Auditorium)召开新品发布会.本次着重介绍了3D Touch功能, 大体介绍一 ...

  6. 美团推出外卖版拼多多;iOS 14 Beta 3暂禁用3D Touch功能;Rust 1.45 发布| 极客头条

    整理 | 屠敏 头图 | CSDN 下载自东方 IC 扫描二维码,即刻收听 极客头条音频版 智能播报由出门问问「魔音工坊」提供技术支持 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上 ...

  7. 《App架构师实践指南》:移动开发的进阶指南

    文章主要内容: 什么是 app 架构师 这本书主要内容 读完感受 什么是 App 架构师 成为"架构师"是许多程序员的梦想,当然也包括我,在工作的几年里,我见过很多架构师,他们在设 ...

  8. ArchSummit分享 | 高德地图App架构演化与实践

    讲师介绍 郝仁杰,高德地图无线开发专家.在7月13日落幕的2019年ArchSummit峰会上就高德地图近几年的App架构演化和实践进行了分享. 背景概述 高德是国内领先的数字地图内容.导航和位置服务 ...

  9. iPhone 或将告别 3D Touch ?

    作者 | 屠敏 出品 | CSDN(ID:CSDNnews) 生于创新,死于无用. 或许这句话说的太过绝对,但是用在 3D Touch 这项技术身上似乎又毫不为过,当然其中的"无用" ...

最新文章

  1. 上传图片配置控制大小_esp32-cam拍照上传云平台,http协议传输
  2. linux查询锁定时间,Linux限制远程登陆尝试密码次数及锁定时间
  3. 得到当前日期前一天的零时零分零秒及当前日的零时零分零秒
  4. OutOfRangeError closed and has insufficient elements (requested 512, current size 362)
  5. SpringBoot中通过ConfigurationProperties注解的方式读取application.yml中配置的属性值
  6. Qt C++属性类型提供给 QML调用(二)
  7. pixhawk PX4FMU和PX4IO最底层启动过程分析
  8. linux内核开发基础(linux内核源码、树莓派源码编译、SD卡挂载)
  9. 表单必填标星_怎么用JS做form表单验证,要详细代码,求救!(带星号的是必填项)...
  10. Atitit.web预览播放视频的总结
  11. arrays中copyof复制两个数组_Java的数组初识和拷贝用法
  12. const 常量_var,let,const 的区别?
  13. hsweb提取页面查询参数_zabbix-基础系列(七)-zabbix用户参数
  14. 同步 Visual Studio Code 设置
  15. PyTorch学习笔记(四):PyTorch基础实战
  16. C#制作网站挂机程序
  17. php中的资源是什么意思,PHP 和 COM
  18. 利用CASS使用三种方法计算两期土方
  19. 技术分享 | 排序(filesort)详细解析(8000 字长文)
  20. 2021桂林市高考一调成绩查询,2021年广西桂林市高考化学一调试卷.docx

热门文章

  1. LSP与tunnel关系
  2. Spring boot 项目(二十六)——集成elasticsearch实现简单的书籍搜索
  3. ―挑战你的极限―(短篇医院感人鬼故事两则)
  4. 巨头围攻之下,独立云厂商前途何在?
  5. 北京求职日记 java 第一天
  6. 英语总结系列(二十八):改变自己
  7. 论文笔记-- Multi-Task Learning in recommendation
  8. odoo创建模块(八)--关系字段
  9. 愛上一座城是因为爱上一个人
  10. 神武3手游一直等待服务器响应,神武3手游:新区人太多遭“抱怨”,玩家一个多月时间攒出神兽!...