一、前言
因最近入手一个6sp, 看着3DTouch 挺好玩的,就想自己实现下,
3D Touch 听上去好高端,很难开发的样子,但原来那么简单,往往看着复杂高端的的东西其实简单。因为很多都是现成可用的。
好了 上代码
二、配置、设置、实现
1.静态配置 & 动态 配置
1.1 静态配置 首先打开plist文件
1.2 在plist添加 UIApplicationShortcutItems 添加item
注释:
UIApplicationShortcutItemType(必填项) 这个键值设置一个快捷通道类型的字符串
UIApplicationShortcutItemTitle (必填项) 这个键值设置标签的标题
UIApplicationShortcutItemSubtitle (可选项) 设置标签的副标题
UIApplicationShortcutItemIconType (可选项) 设置标签Icon类型
2.动态配置
在appDelegate.m文件中 设置, 我喜欢在代码中设置,方便
在appDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 创建ShortcutItem
[self createShortcutItem]; // 设置 3D touch 快捷选项
UIApplicationShortcutItem *shortcutItem = [launchOptions valueForKey:UIApplicationLaunchOptionsShortcutItemKey];
//如果是从快捷选项标签启动app,则根据不同标识执行不同操作,然后返回NO,防止调用- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler
if (shortcutItem) {
if ([shortcutItem.type isEqualToString:@"com.gonghuipay.gongfubao.pay"]) {
// 进入发工资界面
GFBLog(@"进入发工资界面");
XZHPaySalaryProjectVC *paySalaryVC = [[XZHPaySalaryProjectVC alloc] initWithNibName:@"XZHPaySalaryProjectVC" bundle:nil];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:paySalaryVC];
self.window.rootViewController = nav;
} else if ([shortcutItem.type isEqualToString:@"com.gonghuipay.gongfubao.myQRCode"]) {
// 进入我的二维码界面
GFBLog(@"我的二维码界面");
} else if ([shortcutItem.type isEqualToString:@"com.gonghuipay.gongfubao.RichScan"]){
// 进入扫一扫
GFBLog(@"进入扫一扫");
XZHScanCodeViewController *scanCodeVC = [[XZHScanCodeViewController alloc] init];
scanCodeVC.pushScanCodeType = MainPush;
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:scanCodeVC];
self.window.rootViewController = nav;
}
return NO;
}
return YES
}
/**
* 3D touch 快捷选项
*/
- (void) createShortcutItem {
// 创建系统风格的icon
UIApplicationShortcutIcon *icon1 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"HomePage_Scan"];
UIApplicationShortcutIcon *icon2 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"red-envelope"];
UIApplicationShortcutIcon *icon3 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"blackberry-qr-code-variant"];
//创建快捷选项
UIApplicationShortcutItem * item = [[UIApplicationShortcutItem alloc]initWithType:@"com.gonghuipay.gongfubao.RichScan" localizedTitle:@"扫一扫" localizedSubtitle:@"" icon:icon1 userInfo:nil];
UIApplicationShortcutItem * item1 = [[UIApplicationShortcutItem alloc]initWithType:@"com.gonghuipay.gongfubao.pay" localizedTitle:@"发工资" localizedSubtitle:@"" icon:icon2 userInfo:nil];
UIApplicationShortcutItem * item2 = [[UIApplicationShortcutItem alloc]initWithType:@"com.gonghuipay.gongfubao.myQRCode" localizedTitle:@"我的二维码" localizedSubtitle:@"" icon:icon3 userInfo:nil];
//添加到快捷选项数组
[UIApplication sharedApplication].shortcutItems = @[item, item1, item2];
}
- 设置相应事件
// 3D Touch 响应事件
- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem
completionHandler:(void(^)(BOOL succeeded))completionHandler{
//判断先前我们设置的唯一标识
if (shortcutItem) {
if ([shortcutItem.type isEqualToString:@"com.gonghuipay.gongfubao.pay"]) {
// 进入发工资界面
GFBLog(@"进入发工资界面");
XZHPaySalaryProjectVC *paySalaryVC = [[XZHPaySalaryProjectVC alloc] initWithNibName:@"XZHPaySalaryProjectVC" bundle:nil];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:paySalaryVC];
self.window.rootViewController = nav;
} else if ([shortcutItem.type isEqualToString:@"com.gonghuipay.gongfubao.myQRCode"]) {
// 进入我的二维码界面
GFBLog(@"我的二维码界面");
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"LCMinePage" bundle:nil];
LCQRCodeInformationViewController *codeInformationVC = [storyboard instantiateViewControllerWithIdentifier:@"LCQRCodeInformationViewController"];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:codeInformationVC];
self.window.rootViewController = nav;
} else if ([shortcutItem.type isEqualToString:@"com.gonghuipay.gongfubao.RichScan"]){
// 进入扫一扫
GFBLog(@"进入扫一扫");
XZHScanCodeViewController *scanCodeVC = [[XZHScanCodeViewController alloc] init];
scanCodeVC.pushScanCodeType = MainPush;
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:scanCodeVC];
self.window.rootViewController = nav;
}
}
if (completionHandler) {
completionHandler(YES);
}
}
以上就完成了,可以测试
三、效果
简单吧····
四、总结
但这边有一个问题,就是第一次刚安装应用程序的时候, shortitemsmenu 启动不起来,需要启动下app 才可以。不懂原因,知道的可以告知下。
因公司项目测试的,无demo,不懂的可以发邮一起探讨 229201093@qq.com
参考链接:http://www.cnblogs.com/zhanglinfeng/p/5133939.html
最近在写Swift项目,后期有时间写一个Swift版本