3DTouch开发

一、 写在前面

最近工作中遇到了3DTouch的开发,从网上查了一下资料,很轻易的就搞定了。3DTouch的开发并不难,而且网上有大把的资料。自己重新写一遍开发流程,显得有点多余。经过一番纠结以后,还是决定写下来。当做是知识的巩固。本文所讲的3DTouch主要是Home Screen Quick Actions(指快捷选项标签)的开发。

二、Home Screen Quick Actions

添加Home Screen Quick Actions有两种方式:
1.通过Plist文件静态设置;(推荐)
2.通过代码动态添加。(不推荐)
两种方法的区别在于:通过Plist设置无需运行程序,也就是说在下载App后,不需要打开应用,就可以即可唤出Home Screen Quick Actions;而通过代码动态添加的,必须在第一次下载后打开App,才能出现Home Screen Quick Actions。

通过Plist文件静态设置

在应用的 Info.plist 文件中添加UIApplicationShortcutItems数组。
数组中添加字典,如下图所示:


WechatIMG1.jpeg

其中,字典的Key有以下选项:

名称 说明 是否必填
UIApplicationShortcutItemTitle 标签的标题 必填
UIApplicationShortcutItemType 标签的唯一标识 必填
UIApplicationShortcutItemIconType 使用系统图标的类型,如搜索、定位、home等 可选
UIApplicationShortcutItemIconFile 使用项目中的图片作为标签图标 可选
UIApplicationShortcutItemSubtitle 标签副标题 可选
UIApplicationShortcutItemUserInfo 字典信息,如传值使用 可选

通过动态代码创建

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  //创建快捷item的icon UIApplicationShortcutItemIconFile
    UIApplicationShortcutIcon *icon1 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"3DTouch_icon1.png"];
    UIApplicationShortcutIcon *icon2 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"3DTouch_icon2.png"];
    
    //创建快捷item的userinfo UIApplicationShortcutItemUserInfo
    NSDictionary *info1 = @{@"url":@"openmobile"};
    NSDictionary *info2 = @{@"url":@"mobilerech"};
    //创建ShortcutItem
    UIMutableApplicationShortcutItem *item1 = [[UIMutableApplicationShortcutItem alloc]initWithType:@"XS_3DTocuh_1" localizedTitle:@"按钮1" localizedSubtitle:nil icon:icon1 userInfo:info1];
    UIMutableApplicationShortcutItem *item2 = [[UIMutableApplicationShortcutItem alloc]initWithType:@"XS_3DTocuh_2" localizedTitle:@"按钮2" localizedSubtitle:nil icon:icon2 userInfo:info2];
    NSArray *items = @[item1, item2];
    [UIApplication sharedApplication].shortcutItems = items;
}

三. 逻辑处理

  1. 目前Home Screen Quick Actions最多只能添加4个。
    无论用哪种方式添加,当点击item后,都会调用以下方法:
- (void)application:(UIApplication *)application performActionForShortcutItem:(nonnull UIApplicationShortcutItem *)shortcutItem completionHandler:(nonnull void (^)(BOOL))completionHandler{
//通过type来判断点击的是哪个item
  if ([item.type isEqualToString:@"XS_3DTocuh_1"]) {
       
            } 

}

2.特别注意 :如果是通过plist文件静态设置 的,当进程杀死以后,再通过3Dtouch进入程序,系统并不会走上面的方法。有些逻辑可能就无法实现,可以在APPDelegate中判断程序是否是通过3Dtouch启动的,然后做一些相关的逻辑处理,具体代码如下:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        NSDictionary *shortCut = [launchOptions objectForKey:@"UIApplicationLaunchOptionsShortcutItemKey"];
if ([shortCut isKindOfClass:[UIApplicationShortcutItem class]]){
            [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"3DTouch"] ;
        }
}

你可能感兴趣的:(3DTouch开发)