3D Touch 功能开发 模拟器运行
2016-12-07 12:51
375 查看
3D Touch功能的开发难度并不大,但是由于该功能需要有硬件支持,并且在模拟器上无法体验,所以阻挡了一大批开发者的探索脚步。不过在计算机界从来没有能难倒程序员的问题,本文首先将介绍如何使用3D Touch的
3D Touch有三大模块:
1、peek and pop
类似于系统邮件、QQ这样的App,在消息列表页面按压某条邮件或会话,则会弹出这个邮件或会话的阅览,如果继续施加压力按压,则会弹出完整的邮件详情页面或会话对话框。如下图所示:
用力按压消息列表,弹出会话概览
继续施加压力,弹出完整的对话框
这种方式使用频度不高,所以在本文中不做技术介绍,本文主要介绍3D Touch的另一种使用方式:用力按压App图标,弹出App的快速入口,通过快速入口直接进入到想要的功能页面。
2、Home Screen Quick Actions
通过主屏幕的应用Icon,我们可以用3D Touch呼出一个菜单,进行快速定位应用功能模块相关功能的开发,。如微信、京东的App,本文也将重点介绍这项开发技术。
微信的快速入口
京东的快速入口
3、Force Properties
iOS9为我们提供了一个新的交互参数:力度。我们可以检测某一交互的力度值,来做相应的交互处理。例如,我们可以通过力度来控制快进的快慢,音量增加的快慢等。
3D Touch快速入口标签有两种添加方式:一种是静态添加,在工程中的
静态添加入口标签不需要写代码,只需要在
我们需要在
info.plist中添加的内容
分析一下添加的项目分别代表什么意思。
首先是
然后是
按照如上截图配置
静态添加的标签
这是在
这种方法需要我们写代码来添加,首先来认识三个类:
我们创建一个新工程,然后在工程中根视图的
上边的代码,第一步创建出标签的入口,这一步的配置与静态添加标签中的
如果系统图标不满足需求,可以使用
第二步是创建一个标签,并进行相关配置,这一步与静态添加标签中的
第三步是将标签添加进pplication的shortcutItems中,如果想添加多个标签,可以创建多个
添加完后,我们再次运行程序查看效果:
动态添加标签后的效果
标签添加完成了,现在我们可以通过两种途径来启动App,一种是传统的点击icon图标启动App,另一种是通过按压icon唤起快速入口,通过快速入口进入App中指定的功能页面。我们要如何检测是从哪里进入App呢?
iOS9在AppDelegated中提供了一个新方法:
如果是从快速入口启动的App,我们可以判断
来一个需求:如果是从“点我”这个标签进来的,我们把页面背景颜色修改为黄色,如果是从“么么哒”这个标签进来的,我们讲页面背景颜色修改为红色。代码如下:
上边我们讲了这么多,还是需要在iphone6s中来验证效果。对于没有设备的同学们怎么办呢?我们可以安装一些插件,来让模拟器支持一下3D Touch中的
首先我们需要在gitHub中下载一个插件,这个插件只能安装在Xcode7中。地址在这里:https://github.com/DeskConnect/SBShortcutMenuSimulator
剩下的按照这个页面的指引操作就可以了。为了照顾一下懒得看英文的同学,在这里我把操作步骤列举出来。
1、 在终端中输入命令
Home Screen Quick Actions功能,然后介绍如何在模拟器中使用3D Touch。
3D Touch开发
3D Touch功能概览
3D Touch有三大模块:1、peek and pop
类似于系统邮件、QQ这样的App,在消息列表页面按压某条邮件或会话,则会弹出这个邮件或会话的阅览,如果继续施加压力按压,则会弹出完整的邮件详情页面或会话对话框。如下图所示:
用力按压消息列表,弹出会话概览
继续施加压力,弹出完整的对话框
这种方式使用频度不高,所以在本文中不做技术介绍,本文主要介绍3D Touch的另一种使用方式:用力按压App图标,弹出App的快速入口,通过快速入口直接进入到想要的功能页面。
2、Home Screen Quick Actions
通过主屏幕的应用Icon,我们可以用3D Touch呼出一个菜单,进行快速定位应用功能模块相关功能的开发,。如微信、京东的App,本文也将重点介绍这项开发技术。
微信的快速入口
京东的快速入口
3、Force Properties
iOS9为我们提供了一个新的交互参数:力度。我们可以检测某一交互的力度值,来做相应的交互处理。例如,我们可以通过力度来控制快进的快慢,音量增加的快慢等。
Home Screen Quick Actions开发指南
3D Touch快速入口标签有两种添加方式:一种是静态添加,在工程中的info.plist文件中添加相关项目。通过这种方式添加的标签,在app第一次运行前,就可以唤出这些标签;另一种是动态添加,通过代码给App添加快速入口。这种方式添加的标签,第一次运行App前是看不到这些标签的,必须先运行一次App,以后就可以唤出这些标签了。
静态添加入口标签
静态添加入口标签不需要写代码,只需要在info.plist文件中添加相关功能设置即可。不过因为没有语句提示,所以我们只能一个字母一个字母的去添加,这一点不是很友好。
我们需要在
info.plist中添加如下信息:
info.plist中添加的内容
分析一下添加的项目分别代表什么意思。
首先是
UIApplicationShortcutItems,他是一个数组类型,数组中的每一个元素表示一个入口标签。
然后是
Item0,这是数组中的一个元素,字典类型。在这个字典中配置各个标签的相关属性。
字段名 | 功能 | 是否必须 | 备注 |
---|---|---|---|
UIApplicationShortcutItemType | 这个键值设置一个快捷通道类型的字符串 | 必有项 | 我们可以监听该项的值来判断用户是从哪一个标签进入App的,该字段的值可以为空。 |
UIApplicationShortcutItemTitle | 这个键值设置标签的标题 | 必有项 | 我们可以监听该项的值来判断用户是从哪一个标签进入App的 |
UIApplicationShortcutItemSubtitle | 设置标签的副标题 | 可选项 | |
UIApplicationShortcutItemIconType | 设置标签的图标样式,系统提供了29中样式的图标,但大部分只能在9.1的系统上使用,只有少数可以在9.0的系统中使用,这一部分会在后边详细介绍 | 可选项 | |
UIApplicationShortcutItemIconFile | 设置自定义标签图片文件的路径 | 可选项 | |
UIApplicationShortcutItemUserInfo | 设置用户信息,是一个字典类型,可以用来传值 | 可选项 |
info.plist文件后,我们运行程序,然后按压icon,出现的是如下效果:
静态添加的标签
这是在
UIApplicationShortcutItems中添加了一个Item的情况,只添加了一个标签,如果想添加多个静态标签,如法炮制出多个Item即可。
动态添加入口标签
这种方法需要我们写代码来添加,首先来认识三个类:类名 | 功能描述 |
---|---|
UIApplicationShortcutItem | 创建标签的类 |
UIMutableApplicationShortcutItem | 创建可变标签的类 |
UIApplicationShortcutIcon | 创建标签ICON的类 |
viewDidLoad方法中添加如下代码:
// 创建标签的ICON图标。 UIApplicationShortcutIcon *icon = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeAdd]; // 创建一个标签,并配置相关属性。 UIApplicationShortcutItem *item = [[UIApplicationShortcutItem alloc] initWithType:@"two" localizedTitle:@"么么哒" localizedSubtitle:@"爱你呦" icon:icon userInfo:nil]; // 将标签添加进Application的shortcutItems中。 [UIApplication sharedApplication].shortcutItems = @[item];
上边的代码,第一步创建出标签的入口,这一步的配置与静态添加标签中的
UIApplicationShortcutItemIconType目的一样。系统给我们提供了如下样式的标签:
typedef NS_ENUM(NSInteger, UIApplicationShortcutIconType) { UIApplicationShortcutIconTypeCompose, UIApplicationShortcutIconTypePlay, UIApplicationShortcutIconTypePause, UIApplicationShortcutIconTypeAdd, UIApplicationShortcutIconTypeLocation, UIApplicationShortcutIconTypeSearch, UIApplicationShortcutIconTypeShare, UIApplicationShortcutIconTypeProhibit NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeContact NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeHome NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeMarkLocation NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeFavorite NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeLove NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeCloud NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeInvitation NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeConfirmation NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeMail NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeMessage NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeDate NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeTime NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeCapturePhoto NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeCaptureVideo NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeTask NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeTaskCompleted NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeAlarm NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeBookmark NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeShuffle NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeAudio NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeUpdate NS_ENUM_AVAILABLE_IOS(9_1) } NS_ENUM_AVAILABLE_IOS(9_0) __TVOS_PROHIBITED;
如果系统图标不满足需求,可以使用
+ (instancetype)iconWithTemplateImageName:(NSString *)templateImageName;添加自定义图片作为标签,需要注意的是:图片必须预先添加进bundle。
第二步是创建一个标签,并进行相关配置,这一步与静态添加标签中的
Item0一样,初始化中的相关设置和上边一模一样,不多啰嗦。
第三步是将标签添加进pplication的shortcutItems中,如果想添加多个标签,可以创建多个
UIApplicationShortcutItem对象,并加入数组中。
添加完后,我们再次运行程序查看效果:
动态添加标签后的效果
检测App启动方式
标签添加完成了,现在我们可以通过两种途径来启动App,一种是传统的点击icon图标启动App,另一种是通过按压icon唤起快速入口,通过快速入口进入App中指定的功能页面。我们要如何检测是从哪里进入App呢?iOS9在AppDelegated中提供了一个新方法:
- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler,如果App是从快速入口启动的,则会执行这个方法。该方法的
shortcutItem参数携带了从快速入口进入app时的标签参数。
如果是从快速入口启动的App,我们可以判断
shortcutItem.localizedTitle属性的值来判断是从哪一个标签进入的App。
来一个需求:如果是从“点我”这个标签进来的,我们把页面背景颜色修改为黄色,如果是从“么么哒”这个标签进来的,我们讲页面背景颜色修改为红色。代码如下:
// 程序在后台运行,或者从死亡被激活,从3d进来的页面 - (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler { if ([shortcutItem.localizedTitle isEqualToString:@"点我"]) { self.window.rootViewController.view.backgroundColor = [UIColor yellowColor]; } else if ([shortcutItem.localizedTitle isEqualToString:@"么么哒"]) { self.window.rootViewController.view.backgroundColor = [UIColor redColor]; } }
彩蛋:如何在模拟器中使用3D Touch功能?
上边我们讲了这么多,还是需要在iphone6s中来验证效果。对于没有设备的同学们怎么办呢?我们可以安装一些插件,来让模拟器支持一下3D Touch中的Home Screen Quick Actions模块功能。
首先我们需要在gitHub中下载一个插件,这个插件只能安装在Xcode7中。地址在这里:https://github.com/DeskConnect/SBShortcutMenuSimulator
剩下的按照这个页面的指引操作就可以了。为了照顾一下懒得看英文的同学,在这里我把操作步骤列举出来。
插件安装篇
1、 在终端中输入命令git clone https://github.com/DeskConnect/SBShortcutMenuSimulator.git[/code]克隆该插件到本地。
克隆插件
2、 继续输入命令cd SBShortcutMenuSimulator进入插件所在文件夹
3、输入命令make安装插件
安装插件1、输入命令
插件使用篇xcrun simctl spawn booted launchctl debug system/com.apple.SpringBoard --environment DYLD_INSERT_LIBRARIES=$PWD/SBShortcutMenuSimulator.dylib和xcrun simctl spawn booted launchctl stop com.apple.SpringBoard启动插件
2、输入命令来唤起某个App的Home Screen Quick Actions功能:echo 'com.apple.mobilecal' | nc 127.0.0.1 8000。其中的com.apple.mobilecal是你的bundle
id。命令执行效果如下:
命令执行效果
我们把bundle id换为我们刚刚写的工程的ID,测试一下echo 'quanzheng.-DTouchDemo' | nc 127.0.0.1 8000
真棒!大功告成!!
相关文章推荐
- 模拟器使用3D Touch功能
- 3DTouch 开发过程记录,按功能模块记录
- Peek和Pop功能开发(3D Touch开发之一)
- SBShortcutMenuSimulator实现模拟器上测试 3D Touch 功能
- iOS9 3D Touch 标签菜单 peek and pop force 压力触控 功能开发高级版教程
- Android开发周报:Android N将引入3D Touch功能、官方MVP架构解析
- [Phonegap+Sencha Touch] 移动开发24 打包wp8.1的App,运行时输入框聚焦弹出软键盘之后,界面上移而不恢复原位的解决办法
- WPF Multi-Touch 开发:Windows 7 安装多点触屏模拟器(转)
- [Phonegap+Sencha Touch] 移动开发24 打包wp8.1的App,运行时输入框聚焦弹出软键盘之后,界面上移而不恢复原位的解决办法
- 深入浅出 - Android系统移植与平台开发(三)- 编译并运行Android4.0模拟器
- ios开发答疑录系列---ios编译正常,但无法运行到真机和模拟器上 ,Choose a destination with a supported architecture
- 深入浅出 - Android系统移植与平台开发(三)- 编译并运行Android4.0模拟器
- 《About Multi-Touch(多点触摸是个什么东西?)》:MultiTouch Vista全解析(Windows 7 多点触摸开发模拟器和多点触摸驱动)
- android 模拟器 3D 开发环境配置
- ios开发ios7自定义导航栏模拟器和真机运行界面坐标不一致
- 【COCOS2DX-游戏开发之十五】eclipse下模拟器运行cocos2dx程序
- [项目部]项目A组(邱震钰)-3D终结者(C++):开发功能文档初步
- WPF Multi-Touch 开发:Windows 7 安装多点触屏模拟器
- xcode开发,找到iphone模拟器运行时目录的方法
- iphone开发 运行模拟器出现"ARC forbids explicit message send of 'retain' 错误信息