申明Quick Action有两种方式:静态和动态

静态是在info.plist文件中申明,动态则是在代码中注册,系统支持两者同时存在。

-系统限制每个app最多显示4个快捷图标,包括静态和动态

静态

在app的plist文件中增加如下申明:

<key>UIApplicationShortcutItems</key>
<array>
<dict> <key>UIApplicationShortcutItemIconType</key>
<string>UIApplicationShortcutIconTypeSearch</string> <key>UIApplicationShortcutItemSubtitle</key>
<string>shortcutSubtitle1</string> <key>UIApplicationShortcutItemTitle</key>
<string>shortcutTitle1</string> <key>UIApplicationShortcutItemType</key>
<string>First</string> <key>UIApplicationShortcutItemUserInfo</key>
<dict>
<key>firstShorcutKey1</key>
<string>firstShortcutKeyValue1</string>
</dict> </dict>
</array>

UIApplicationShortcutItemType:其实是快捷方式的id,唯一标签

UIApplicationShortcutItemTitle:标题

UIApplicationShortcutItemSubtitle:副标题

UIApplicationShortcutItemIconType:图标

UIApplicationShortcutItemIconFile: 自定义图标,上面IconType定义将被忽略。图标格式35x35像素单色。

UIApplicationShortcutItemUserInfo:额外信息

系统自带图标的样式分别是:

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_1)  有这个的是在9.1 系统后才支持的,注意下哈。

上面的看不懂,没关系,照着下面的图打,就行。
我打的时候,没提示,打错一个字母就没效果。
实际效果:
 

 

动态

UIApplication对象多了一个支持快捷方式的数组

@property(nonatomic, copy) NSArray <UIApplicationShortcutItem *> *shortcutItems

如果需要增加快捷方式,可以赋值给shortcutItems属性。

如果静态和动态方式同时使用的话,赋值的时候也不会覆盖静态方式申明的快捷方式,不用担心。

UIApplicationShortcutItem对象init方法

(instancetype)initWithType:(NSString *)type
localizedTitle:(NSString *)localizedTitle
localizedSubtitle:(NSString *)localizedSubtitle
icon:(UIApplicationShortcutIcon *)icon
userInfo:(NSDictionary *)userInfo`

各个字段跟上面静态方式申明的时候意义一样。

其中定义快捷方式图标UIApplicationShortcutIcon,有3种init方法:

`

// 根据系统预置图标类型
-(instancetype)iconWithType:(UIApplicationShortcutIconType)type // 根据app bundle里面的图标名称自定义
-(instancetype)iconWithTemplateImageName:(NSString *)templateImageName // 根据通讯录联系人名称
-(instancetype)iconWithContact:(CNContact *)contact`
// 下面demo, 可以直接复制进入application.m 里使用
//快捷方式响应方法
- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void(^)(BOOL succeeded))completionHandler NS_AVAILABLE_IOS(9_0) __TVOS_PROHIBITED{
/*   //这是我的demo里面的控制器 跳转方法, 原理就是根据shortcutItem.type 判断跳转页面
 UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    ViewController *mainView = [storyboard instantiateViewControllerWithIdentifier:@"mainController"];
    UINavigationController *mainNav = [[UINavigationController alloc] initWithRootViewController:mainView];
    self.window.rootViewController = mainNav;
    [self.window makeKeyAndVisible];
   
    //判断先前我们设置的快捷选项标签唯一标识,根据不同标识执行不同操作
    if([shortcutItem.type isEqualToString:@"Video"  ]){
        VideoViewController *videoVC= [VideoViewController new];
        [self.window.rootViewController presentViewController:videoVC animated:YES completion:^{
        }];
    } else if ([shortcutItem.type isEqualToString:@"PIC"]) {
        PICViewController *picVC = [PICViewController new];
        [mainNav pushViewController:picVC animated:NO];
    } else if ([shortcutItem.type isEqualToString:@"NEW"]) {
        NewViewController *newVC = [NewViewController new];
        [mainNav pushViewController:newVC animated:NO];
    }

if (completionHandler) {
        completionHandler(YES);
    }
   */
   

   // 打印userInfo (传值用)  type(这是快捷方式的唯一标签,根据它的返回值进行判断,在执行需要的操作)
    NSLog(@"userInfo %@ type %@",shortcutItem.userInfo,shortcutItem.type);
   
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    //代码的方式添加快捷方式 动态
    if (application.shortcutItems.count==0) {
        //
        UIMutableApplicationShortcutItem *shortItem1=[[UIMutableApplicationShortcutItem alloc] initWithType:@"UIApplicationShortcutIconTypePlay" localizedTitle:@"段子" localizedSubtitle:@"进入段子" icon:[UIApplicationShortcutIcon iconWithType: UIApplicationShortcutIconTypePlay]userInfo:@{@"firstShortcutKey1":@"fristShorcut"}];
        UIMutableApplicationShortcutItem *shortItem2=[[UIMutableApplicationShortcutItem alloc] initWithType:@"UIApplicationShortcutIconTypePlay" localizedTitle:@"视频" localizedSubtitle:@"进入视频" icon:[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypePause] userInfo:@{@"firstShortcutKey1":@"secondShorcut"}];
         UIMutableApplicationShortcutItem *shortItem3=[[UIMutableApplicationShortcutItem alloc] initWithType:@"UIApplicationShortcutIconTypePlay" localizedTitle:@"图片" localizedSubtitle:@"进入图片" icon:[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypePause] userInfo:@{@"firstShortcutKey1":@"thridShorcut"}];
         UIMutableApplicationShortcutItem *shortItem4=[[UIMutableApplicationShortcutItem alloc] initWithType:@"UIApplicationShortcutIconTypePlay" localizedTitle:@"资讯" localizedSubtitle:@"进入资讯" icon:[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypePause] userInfo:@{@"firstShortcutKey1":@"fiveShorcut"}];
       
        application.shortcutItems=@[shortItem1,shortItem2,shortItem3,shortItem4];
       
    }
    return YES;
}
 
测试效果如下:
 最后一个小点: APP 图标在屏幕的哪侧,快捷方式就在哪侧。
 右边

左边:

3D touch 静态、动态设置及进入APP的跳转方式的更多相关文章

  1. 使用 gradle 在编译时动态设置 Android resValue / BuildConfig / Manifes中&lt;meta-data&gt;变量的值

    转载请标明出处:http://blog.csdn.net/xx326664162/article/details/49247815 文章出自:薛瑄的博客 你也能够查看我的其它同类文章.也会让你有一定的 ...

  2. 3D Touch介绍:电子秤App与快捷操作

    随着iPhone6s与6s plus的到来,苹果给我们展现了一种全新的交互方式:重按手势.你可能知道,这个特性已经在Apple Watch和MacBook上推出了,不过那时叫Force Touch,就 ...

  3. android 静态和动态设置 Receiver的 android:enabled值

    0x 01 前提约束: 0x001 静态检查:指用action限定Intent,并使用包管理器的queryBroadCastReceivers方法,在flags字段置为0时查找ResolveInfo, ...

  4. 微信成为首批支持iPhone 6s /Plus 上 3D Touch 功能的 App

    2015苹果新品发布会上微信成为首批支持iPhone 6s 和 iPhone 6s Plus 上 3D Touch 功能的 App.通过 3D Touch,微信用户将可以通过更精减的操作完成基本任务, ...

  5. 微信小程序首页index.js获取不到app.js中动态设置的globalData的原因以及解决方法

    前段时间开发了一款微信小程序,运行了也几个月了,在index.js中的onLoad生命周期里获取app.js中onLaunch生命周期中在接口里动态设置的globalData一直没有问题,结果昨天就获 ...

  6. 解决方案:ipv4地址手动设置之后关掉推出再打开就没了(静态Ip设置好之后又自动变动态IP)

    解决方案:ipv4地址手动设置之后关掉推出再打开就没了(静态Ip设置好之后又自动变动态IP) 1.情况说明:修改好IP,关掉窗口后,又变成 自动获取IP (如图二) 2.解决方案: 1)调出 服务和应 ...

  7. iOS 3D Touch实践

    本文主要讲解3DTouch各种场景下的开发方法,开发主屏幕应用icon上的快捷选项标签(Home Screen Quick Actions),静态设置 UIApplicationShortcutIte ...

  8. 初学3D Touch

    引言 With iOS 9, new iPhone models add a third dimension to the user interface. A user can now press y ...

  9. iOS 3D Touch 适配开发

    3D Touch的主要应用 文档给出的应用介绍主要有两块: 1.A user can now press your Home screen icon to immediately access fun ...

随机推荐

  1. mysql术语解释

    数据库(database): 数据表的集合: 数据表 (table):数据的矩阵: 列(column): 相同属性的数据的集合: 行(row): 一个对象的各种属性数据的集合: 冗余():一个字段在多 ...

  2. 将Discuz.net 集成到asp.net

    1,将bbs文件夹拷贝到网站的根目录下: 2,将bbs里面的bin目录,config目录,cache目录,DNT.config文件拷贝到网站根目录下: 3,修改网站web.config文件,在http ...

  3. POJ 2175 Evacuation Plan 费用流 负圈定理

    题目给了一个满足最大流的残量网络,判断是否费用最小. 如果残量网络中存在费用负圈,那么不是最优,在这个圈上增广,增广1的流量就行了. 1.SPFA中某个点入队超过n次,说明存在负环,但是这个点不一定在 ...

  4. ASP.NET访问网络映射盘&实现文件上传读取功能

    最近在改Web的时候,遇到一个问题,要跨机器访问共享文件夹,以实现文件正常上传下载功能. 要实现该功能,可以采用HTTP的方式,也可以使用网络映射磁盘的方式,今天主要给大家分享一下使用网络映射磁盘的方 ...

  5. 【Map】获取字符串中,每一个字母出现的次数

    package cn.itcast.p1.map.test; import java.util.Iterator; import java.util.Map; import java.util.Tre ...

  6. B. Factory Repairs--cf627B(线段树)

    http://codeforces.com/problemset/problem/627/B 题目大意:  n代表天数 ,k代表每一次维修持续的天数,a代表维修过后每天能生产a件产品,b代表维修之前每 ...

  7. 怎么把U盘启动改为硬盘启动(适用于U盘安装系统时)

    两种方法: 一:安装时: 在自定义创建分区后,如图: 选择系统的启动程序安装的位置,在change  device 里设置第一启动装置,和第二启动装置! 二:安装后: 开机未进入系统按F2,进入BIO ...

  8. Log4net日志GUI配置工具

    关于log4net的配置文章在园子里真的很多,但是有关GUI界面配置的文章确定太少,改写了一个以前很早的工具 以前的那个有很多的问题,这个基本的大的问题没有,可能一个小问题还是需要修改下,基本功能肯定 ...

  9. fragment的生命周期及其各个周期方法的作用

    先上生命周期图: Fragment的生命周期图: 与Activity的生命周期对比图: 由于Fragment是嵌在Activity中使用的,故其生命周期也是依赖于Activity的周期的,或者说Fra ...

  10. “”?: H3C SSH 配置+

    开启ssh 服务 ssh service enable 创建用户 使用ssh local-user ssh 用户级别 authorization-attribute user-role level-1 ...