3D touch 之 Home Screen Quick Action 的创建

如何让 iPhone 模拟器 支持3D touch

接下来就是如何将装逼进行到底

如何创建 Quick Action  也就是重按 app 图标时弹出的那几个菜单

3D touch 之 Home Screen Quick Action 的创建_第1张图片

imooc 免费 IT 教育

正如上面的图中有两个Action Item 【历史记录】【查看下载】

每个 Action 都是使用 UIApplicationShortcutItem 这个对象进行创建的

下面列出每一个 UIApplicationShortcutItem 中能够包含的信息:

名称描述必须

UIApplicationShortcutItemTypeitem事件的唯一标示、通过茨表示可以确定点击的那个itemYES

UIApplicationShortcutItemTitleitem的标题、subtitle为空时、title过长可能会换行显示YES

UIApplicationShortcutItemSubtitleitem的子标题、在title下方以小文字显示NO

UIApplicationShortcutItemIconTypeitem图标枚举、系统的样式NO

UIApplicationShortcutItemIconFile自定义item图标、大小为 35*35 的单一颜色样式呈现、                                        如果设置此项 UIApplicationShortcutItemIconType 将会失效NO

UIApplicationShortcutItemUserInfo以字典的形式 key : valueNO

*  Home Screen Quick Action 的创建 有两种方式

1.静态2.动态

* 需要注意的是每个App最多能够显示4个ActionItem,4个ActionItem,4个ActionItem重要的事情要说 三 遍 最多4个ActionItem支持【静态方式】和【动态方式】同时存在、并不会冲突如果你比较够叛逆、够任性、同时使用了【静态】和【动态】方式那么你给 UIApplication 的 shortcutItems 这个数组赋值的时候并不会覆盖、并不会覆盖、并不会覆盖我又说了三遍... 见谅

静态方式

静态创建的方式是在项目的 Info.plist 文件中添加数组即可

UIApplicationShortcutItemsUIApplicationShortcutItemTypedownloadUIApplicationShortcutItemTitle历史记录UIApplicationShortcutItemSubtitleUIApplicationShortcutItemIconFileshortcut_history.pngUIApplicationShortcutItemUserInfo******UIApplicationShortcutItemTypedownloadUIApplicationShortcutItemTitle查看下载UIApplicationShortcutItemSubtitleUIApplicationShortcutItemIconFileshortcut_download.pngUIApplicationShortcutItemUserInfo******

动态方式

动态方式需要在 application didFinishLachingWithOption: 方法中实现

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {if(self.forceTouchCapability==UIForceTouchCapabilityAvailable) {// 为了更直观的阅读代码 这里分成两行写UIApplicationShortcutIcon*historyIcon;          historyIcon = [UIApplicationShortcutIconiconWithTemplateImageName:@"shortcut_history"];UIApplicationShortcutItem*historyItem = [[UIApplicationShortcutItemalloc]                                                    initWithType:@"history"localizedTitle:@"历史记录"localizedSubtitle:nilicon:historyIcon                                                    userInfo:nil];// 为了更直观的阅读代码 这里分成两行写UIApplicationShortcutIcon*downloadIcom;          downloadIcom = [UIApplicationShortcutIconiconWithTemplateImageName:@"shortcut_download"];UIApplicationShortcutItem*downloadItem = [[UIApplicationShortcutItemalloc]                                                    initWithType:@"download"localizedTitle:@"查看下载"localizedSubtitle:nilicon:downloadIcom                                                    userInfo:nil];          application.shortcutItems= @[historyItem, downloadItem];    }}

关于Quick Action 中 item 的点击事件 回调响应

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

我可以从 shortcutItem 的 type 和 userinfo 来做不同的事件处理

而最后的 completionHandler 在 API 的说明中我们看到当应用并非在后台

而是直接重新开进程的时候,会直接返回NO 这样的话我们的回调会放在

- (BOOL)application:(UIApplication*)application        didFinishLaunchingWithOptions:(NSDictionary*)launchOptions;

这时候 UIApplication 刚好提供了一个可以从 launchOptions 这个字典中

获取到 shortcutItem 的 keyUIApplicationLaunchOptionsShortcutItemKey

有了这个Key 我们就可以处理不同的事件

UIApplicationShortcutItem*item;// 为了更直观的阅读代码 这里分成两行写item = [launchOptions valueForKey:UIApplicationLaunchOptionsShortcutItemKey];

这样我们根据获取到不同的 Action Item 来处理不同的事件

在 performActionForShortcutItem 回调中

- (void)application:(UIApplication*)application        performActionForShortcutItem:(UIApplicationShortcutItem*)shortcutItem        completionHandler:(void(^)(BOOLsucceeded))completionHandler  {if([shortcutItem.typeisEqualToString:@"history"]) {NSLog(@"历史记录");        }elseif([shortcutItem.typeisEqualToString:@"download"]){NSLog(@"查看下载");        }if(completionHandler) {              completionHandler(YES);        }}

你可能感兴趣的:(3D touch 之 Home Screen Quick Action 的创建)