您的位置:首页 > 产品设计 > UI/UE

[绍棠] 通过主屏幕的应用Icon,用3D Touch呼出一个菜单 (Home Screen Quick Actions)

2016-11-15 09:11 369 查看
通过主屏幕的应用Icon,我们可以用3D Touch呼出一个菜单,进行快速定位应用功能模块相关功能的开发,。如微信、京东的App,本文也将重点介绍这项开发技术。 微信的快速入口京东的快速入口3、Force PropertiesiOS9为我们提供了一个新的交互参数:力度。我们可以检测某一交互的力度值,来做相应的交互处理。例如,我们可以通过力度来控制快进的快慢,音量增加的快慢等。

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];
}
}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息