美文网首页
iOS:3DTouch

iOS:3DTouch

作者: 街角仰望 | 来源:发表于2020-07-21 16:16 被阅读0次

给应用添加3D Touch的菜单(主屏交互Home Screen Interaction)一共有2种方式:静态添加(Info.plist方式) 和动态添加(纯代码方式)。

静态添加

直接在info.plist文件中设置如下字段:

  • UIApplicationShortcutItems:主屏交互的按钮指定的模型类。
  • UIApplicationShortcutItemType:主屏交互中使用的按钮的唯一标示符 (必填),用作判断点击了哪一个快捷按钮。
  • UIApplicationShortcutItemIconFile:主屏交互中使用的按钮图片名(可选),可直接使用系统图标如UIApplicationShortcutIconTypeAdd,也可以使用自定义图标,推荐图标为一倍大小35*35的单色图片,图片需要背景透明才能显现出图片样式,图标会被渲染成黑色。
  • UIApplicationShortcutItemTitle:主屏交互中使用的按钮名称(必填)
  • UIApplicationShortcutItemSubtitle:快捷可选项的子标题(可选)
  • UIApplicationShortcutItemUserInfo:快捷可选项的附加信息(可选)

苹果准备的系统icon图片:

动态添加

通过UIApplicationShortcutIcon创建图标.
通过UIApplicationShortcutItem来创建菜单item对象.
item数组赋值给[UIApplication sharedApplication].shortcutItems

实例代码:在AppDelegate里面实现

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.

    //1、创建窗口
    self.window = [[UIWindow alloc] init];
    self.window.frame = [UIScreen mainScreen].bounds;
    self.window.rootViewController = [[MainTabBarController alloc] init];
    
    //2、显示窗口(成为主窗口)
    [self.window makeKeyAndVisible];

    //3、创建3DTouch快捷方式
    //创建快捷视图列表有两种方法,一种是这样用代码写,另一种是编辑info.plist文件中的UIApplicationShortcutItems
    //系统限制每个App最多能够显示4个Action Item,其中包括静态方式和动态方式进行创建的;
    //如果静态和动态方式同时使用的时候,给UIApplication的shortcutItems赋值的时候不会覆盖,静态加载的Item会排在前面
    if (self.window.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable){//判断是否支持3DTouch,模拟器运行的话要去掉判断,否则不调用下面代码
        [self create3DTouchShotItems];
    }
    
    return YES;
}
//创建3DTouch快捷视图列表
- (void)create3DTouchShotItems
{
    //创建快捷item的icon UIApplicationShortcutItemIconFile
    UIApplicationShortcutIcon *icon1 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeAdd];//选择系统提供的图标
    UIApplicationShortcutIcon *icon2 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"setting"];//选择本地图片,推荐一倍大小为35*35,图片需要背景透明才能显现出图片样式,否则为全黑样式
    UIApplicationShortcutIcon *icon3 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeShare];
    
    //创建快捷item的userinfo UIApplicationShortcutItemUserInfo
    NSDictionary *info1 = @{@"url":@"info1"};
    NSDictionary *info2 = @{@"url":@"info2"};
    NSDictionary *info3 = @{@"url":@"info3"};
    
    //创建ShortcutItem
    UIApplicationShortcutItem *item1 = [[UIApplicationShortcutItem alloc] initWithType:@"item1" localizedTitle:@"title1" localizedSubtitle:@"subtitle1" icon:icon1 userInfo:info1];
    UIApplicationShortcutItem *item2 = [[UIApplicationShortcutItem alloc] initWithType:@"item2" localizedTitle:@"title2" localizedSubtitle:@"subtitle2" icon:icon2 userInfo:info2];
    UIApplicationShortcutItem *item3 = [[UIApplicationShortcutItem alloc] initWithType:@"item3" localizedTitle:@"title3" localizedSubtitle:nil icon:icon3 userInfo:info3];
    
    //添加到快捷选项数组
    [UIApplication sharedApplication].shortcutItems = @[item1,item2,item3];
}

监听主屏交互按钮的点击事件

成功设置好主屏交互的快捷按钮后,我们剩下要做的就是在APP内监听快捷按钮的点击事件,此时我们就需要用到UIApplicationShortcutItemType快捷按钮的唯一标示符。

//获取在快捷视图列表点击的item,并对其点击作出反应
- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler
{
    MainTabBarController *tabViewController = (MainTabBarController *) self.window.rootViewController;
    MineVC *vc = [[MineVC alloc] init];
    
    //判断设置的快捷选项标签唯一标识,根据不同标识执行不同操作
    if([shortcutItem.type isEqualToString:@"item0"]){
        MyLog(@"第一个按钮,响应默认方法直接打开应用");
    }else if([shortcutItem.type isEqualToString:@"item1"]){
        MyLog(@"第二个按钮,跳转到指定tab下的某一子界面");
        //tabViewController.selectedViewController就是Nav控制器
        [tabViewController.selectedViewController popToRootViewControllerAnimated:NO];//跳转到根目录下
        tabViewController.selectedIndex = 2;//跳转到指定的tab
        [tabViewController.selectedViewController pushViewController:vc animated:NO];//跳转到指定页面
    }else if([shortcutItem.type isEqualToString:@"item2"]){
        MyLog(@"第三个按钮,直接跳转到某一子界面");
        [tabViewController.selectedViewController pushViewController:vc animated:NO];//跳转到指定页面
    }else{
        MyLog(@"第四个按钮,响应默认方法直接打开应用并打印参数信息");
        [self clickedWithShortcutItem:shortcutItem];
    }
}

-(void)clickedWithShortcutItem:(UIApplicationShortcutItem *)item
{
    if (item.userInfo){
        MyLog(@"%@",item.userInfo[@"obj"]);
    }
}

注:如果想要模仿微信,程序从后台进入前台每次都展示启动页,需要设置plist文件中的Application does not run in backgroundYES,默认为NO,程序在后台不运行。这样每次打开应用都是重新启动会默认展示首页。

如图所示:

运行图

遇到的问题:

1、在AppDelegate中添加是否支持3DTouch的判断,在模拟器上运行看不到效果,屏蔽判断代码可继续在模拟器上调试。

2、使用自定义图片时,图片被渲染成黑色的方块,如图所示:

推荐图标为一倍大小35*35单色图片,图片需要背景透明才能显现出图片样式,同时图标会被主动渲染成黑色。

3、系统限制每个App最多能够显示4ActionItem,其中包括静态方式和动态方式进行创建的;如果静态和动态方式同时使用的时候,给UIApplicationshortcutItems赋值的时候不会覆盖,静态加载的Item会排在前面,且会根据应用所在位置进行排序展示,如图所示:

参考:
https://www.jianshu.com/p/0a0f3cf25960
https://www.jianshu.com/p/14d91ec9a3b7
https://blog.csdn.net/weixin_30670965/article/details/98258829

相关文章

  • 3DTouch 使用

    iOS9之后使用3DTouch 3DTouch功能主要分为两大块:主屏幕Icon上的Quick Action;Pe...

  • ios 3DTouch 官方工程OC版

    ios 3DTouch 官方工程OC版 想要看一下 官方 的3DTouch教程,发现例子竟然只有swift版本的,...

  • 怎么给App的某个功能添加桌面快捷方式?

    iOS中给App添加快捷方式的几种方案: 3DTouch,长按App唤起3DTouch菜单,这个同时也可以当做小组...

  • 给App的某个功能添加桌面快捷方式

    iOS中给App添加快捷方式的几种方案: 3DTouch,长按App唤起3DTouch菜单,这个同时也可以当做小组...

  • 详解3DTouch的使用

    3DTouch的简单使用. 介绍 3DTouch是iOS9的时候出来,对硬件也有要求,也就是说只有iPhone6s...

  • iOS开发中添加3DTouch功能

    iOS开发中添加3DTouch功能 在AppDelegate入口类的入口方法- (BOOL)application...

  • 3DTouch_IOS开发与应用

    3-DTouch_IOS 对集成3DTouch的简单讲解 Demo下载地址:https://github.com/...

  • iOS APP开发添加3D Touch

    本文就iOS开发中如何集成3DTouch做下简单的讲解。 开发环境及调试设备:Xcode7或以上,iOS9或以上,...

  • iOS 3DTouch

    一.什么是3DTouch? 效果图: 点击icon: Peek(预览)和Pop(跳至预览的详细界面): 看完这个,...

  • iOS 3DTouch

    1. 3D Touch的主要应用 官方文档给出的应用介绍主要有两块: 1.A user can now press...

网友评论

      本文标题:iOS:3DTouch

      本文链接:https://www.haomeiwen.com/subject/uhjntktx.html