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

一、简介:

自从苹果公司引入了 3D Touch 功能后,众多开发者,也开在自己的app上实现自己的 3D Touch 效果,今天我也来小秀一把。

我们先来看看,3D Touch 下的 app 快速启动入口 是什么样的效果吧。
这里写图片描述
这是微信的app快速启动入口
这里写图片描述
这是 QQ 的 app快速启动入口

3D Touch的大致原理是:系统根据压力传感器检测到的屏幕上的压力力度的大小,来作出判断。

总体上,app 快速启动入口,分两种方式实现:
1. 静态添加
2. 动态添加

二 、静态添加:

静态添加这种方式比较方便快捷,只需要在 info.plist 文件上添加一个 叫 UIApplicationShortcutItems 的数组就行了,在这个数组中,我们可以添加多个标签,而每个标签是一个 字典,包含几个key,我们先来看看有哪些key吧。

  • UIApplicationShortcutItemType 用于设置快捷通道类型的字符串,这个key是必须要有的,这个key的value可以为空。
  • UIApplicationShortcutItemTitle 用于设置标签的title,这个key是必须要有的,不可以为空。
  • UIApplicationShortcutItemIconFileSubtitle 用于设置标签的副标题,这个key可以没有,
  • UIApplicationShortcutItemIconType 用于设置标签的系统图标,这个key可以没有
  • UIApplicationShortcutItemIconFile 用于设置标签的自定义图标的路径,这个key可以没有
  • UIApplicationShortcutItemUserInfo 用于设置用户信息,作为穿值用的,这个key可以没有

下面举个例子:
这里写图片描述

运行后的效果:
这里写图片描述

三、动态添加

所谓动态添加就是用代码的方式添加app快速启动入口,这种方式相对于静态添加而言,动态添加只能在第一次启动后,才能使用快速入口,而静态添加在app安装后,便可以使用了。

在动态添加方式中主要用到一下几个类:

  • UIApplicationShortcutIcon 标签图标类
  • UIApplicationShortcutItem 标签类
  • UIMutableApplicationShortcutItem 可变标签类

我们创建一个新工程,然后在工程中根视图的viewDidLoad方法中添加如下代码:

 // 第一步:创建一个系统图标
    UIApplicationShortcutIcon *icon = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeAdd];
 // 第二步:创建一个标签,并配置相关属性。若有多个标签就创建多个item,然后在第三步中,把这些item放在数组中。
    UIApplicationShortcutItem *item = [[UIApplicationShortcutItem alloc] initWithType:@"123" 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;

其中带 (9-1)字样的只能在9.1以上的系统中使用,其他的也只能在9.0以上的系统上使用。

我们运行一下来看看效果:
这里写图片描述

四、检测app的启动方式:

设置好了app的快速启动标签,我们来看看如何判断我们点击的是哪一个快速启动标签。

iOS 9在AppDelegate中为我们提供了一个新的方法:

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

}

这个方法中的 shortcutItem 参数 携带了标签的各个属性值,我们可以通过 localizedTitle 这个属性的值,来判断,我们点击的是哪一个标签,并以此来做我们要处理的任务。

例如:

- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler {
    //通过判断标题名字,来执行不同的任务
    if ([shortcutItem.localizedTitle isEqualToString:@"我是标题1"]) {
        //要处理的任务1
    }
    else if ([shortcutItem.localizedTitle isEqualToString:@"我是标题2"]) {
        //要处理的任务2
    }
}
阅读更多
版权声明:本文为博主原创文章,转载请注明作者和原文链接。 https://blog.csdn.net/zhengang007/article/details/50325863
个人分类: ios开发
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭