给应用添加
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 background
为YES
,默认为NO
,程序在后台不运行。这样每次打开应用都是重新启动会默认展示首页。
如图所示:

运行图

遇到的问题:
1、在AppDelegate
中添加是否支持3DTouch
的判断,在模拟器上运行看不到效果,屏蔽判断代码可继续在模拟器上调试。
2、使用自定义图片时,图片被渲染成黑色的方块,如图所示:

推荐图标为一倍大小35*35
的单色
图片,图片需要背景透明才能显现出图片样式,同时图标会被主动渲染成黑色。
3、系统限制每个App
最多能够显示4
个ActionItem
,其中包括静态方式和动态方式进行创建的;如果静态和动态方式同时使用的时候,给UIApplication
的shortcutItems
赋值的时候不会覆盖,静态加载的Item
会排在前面,且会根据应用所在位置进行排序展示,如图所示:


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