一、引言

3D Touch从官网的介绍来看,主要是三个功能:

  1. Home Screen Quick Actions (主屏幕快捷进入)
  2. peek and pop(预览试图)
  3. Force Properties(力度检测)
    我们要做的很简单,就是利用3D Touch的Home Screen Quick Actions在iPhone桌面图标加入强按的快捷入口。
    效果:

二、两种加入方式

1.静态标签

通过项目的plist文件进行入口配置。

必要设置:

  1. 添加UIApplicationShortcutItems数组
  2. 展开UIApplicationShortcutItems数组,添加一个字典
  3. 在字典下添加UIApplicationShortcutItemType(快捷入口的值)
  4. 在字典下添加UIApplicationShortcutItemTitle(快捷入口的标题)

可选项:
UIApplicationShortcutItemSubtitle 设置标签的副标题
UIApplicationShortcutItemIconType 设置标签Icon类型
UIApplicationShortcutItemIconFile 设置标签的Icon文件
UIApplicationShortcutItemUserInfo 设置信息字典(用于传值)

2.动态标签

动态标签其实就是通过代码添加,噢耶。不详细说了
上别人代码:

1
2
3
 UIApplicationShortcutIcon *shortIcon = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypePlay];
UIApplicationShortcutItem *item = [[UIApplicationShortcutItem alloc] initWithType:@"two" localizedTitle:@"第二个标签" localizedSubtitle:@"看我哦" icon:shortIcon userInfo:nil];
    [UIApplication sharedApplication].shortcutItems = @[item];

响应快捷入口

AppDelegate在9.0中新增了一个快捷入口的回调, 类似于推送的回调:

1
2
3
4
5
6
7
8
9
-(void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler{
if ([shortcutItem.type isEqualToString:@"first"]) {
NSLog(@"first");
}
else if ([shortcutItem.type isEqualToString:@"second"]){
NSLog(@"second");
}
completionHandler(YES);
}

此时didFinishLaunchingWithOptions需要返回NO,以免处理逻辑被反复回调

1
2
3
4
5
6
7
(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
BOOL shouldPerformAdditionalDelegateHandling = YES;
if ([launchOptions[UIApplicationLaunchOptionsShortcutItemKey] isKindOfClass:[UIApplicationShortcutItem class]]) {
shouldPerformAdditionalDelegateHandling = NO;
}
return shouldPerformAdditionalDelegateHandling;
}