# 3Dtouch

使用3D Touch功能的可以在主界面添加应用的快捷入口. (Home Screen Quick Actions )

* 这个功能是通过主屏幕的应用Icon，使用3D Touch呼出一个菜单，进行快速定位应用功能模块相关功能的开发。
* 快捷标签最多可以创建四个，包括静态的和动态的。如果同时设定,会优先显示静态的.(app上线后 会自动多一个'分享' 是苹果自动加的 不用做任何处理.也就是说其实最多是五个标签,但是最后一个固定为'分享')
* 静态的可以在程序不打开的情况下显示,动态的必须在程序至少打开一次以后显示.
* 动态添加的可以动态删除,静态的不可以.

## 添加方法

系统提供了两种屏幕标签，分别是静态标签和动态标签。

* 静态标签

  静态标签是我们在项目的配置plist文件中配置的标签，在用户安装程序后就可以使用，并且排序会在动态标签的前面。

  在info.plist文件中添加键值（系统没有提示，只能手动输入） UIApplicationShortcutItems

![](/files/-LAdZY9yqawrgy1nQqAo)相关key介绍

| key                               | 描述                                                                 | 必填  |
| --------------------------------- | ------------------------------------------------------------------ | --- |
| UIApplicationShortcutItemTitle    | 标签的标题                                                              | YES |
| UIApplicationShortcutItemType     | 区分与其他快速选项的分类                                                       | YES |
| UIApplicationShortcutItemSubtitle | 标签的副标题                                                             | NO  |
| UIApplicationShortcutItemIconType | Icon类型                                                             | NO  |
| UIApplicationShortcutItemIconFile | Icon文件(定义以后type无效.不定义,根据type会给系统的icon.只定义这个key但是没有值默认是个点,都不定义没有图标) | NO  |
| UIApplicationShortcutItemUserInfo | 信息字典(用于传值)                                                         | NO  |

* 动态标签

  动态标签可以更加灵活的添加标签.比如某些功能只有用户登录以后才能使用,那么可以在用户登录之后再添加这个标签,在退出登录时删除这个标签.动态添加的标签不会影响静态标签的显示和排序,而且显示时,会自动排在静态标签之后,如果静态标签已经>=4,不会显示.

相关类:

UIApplicationShortcutItem 3D Touch标签的类

UIMutableApplicationShortcutItem 可变的3D Touch标签的类

UIApplicationShortcutIcon 标签中图片Icon的类

```
//创建

UIApplicationShortcutItem * item = [[UIApplicationShortcutItem alloc]initWithType:@"two" localizedTitle:@"第二个标签" localizedSubtitle:@"戳我" icon:[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypePlay] userInfo:nil];

// 添加

[UIApplication sharedApplication].shortcutItems = @[item];

//当前已有的标签
//NSArray * array = [UIApplication sharedApplication].shortcutItems;
```

为了不重复添加标签,可以通过获取当前已有的标签来判断是否应该添加.另外也可以通过这个array删除指定的动态标签,而不是删除所有.

## 响应标签的行为

当我们通过标签进入app时，就会在AppDelegate中调用这样一个回调，可以通过获取shortcutItem的 type 和 userinfo 来进行相关逻辑操作。

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

如果我们不是在后台,而是直接打开的应用.可以在 didFinishLaunchingWithOptions 中来响应快速进入事件,做一些处理.

```
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

UIApplicationShortcutItem *item = [launchOptions valueForKey:UIApplicationLaunchOptionsShortcutItemKey];

}
```

通过这个功能我们可以快速进入app的指定界面.比如微信的扫一扫,微博的转发微博等.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://philm.gitbook.io/philm-ios-wiki/mei-zhou-yue-du/3dtouch.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
