iOS开发-实现3DTouch按压App快捷选项shortcutItems及跳转功能
App的应用图标通过3D Touch按压App图标,会显示快捷选项,点击选项可快速进入到App的特定页面。
这里用到了UIApplicationShortcutItem与UIMutableApplicationShortcutItem
一、效果图
这里暂时着了一张图代替了。
二、UIApplicationShortcutItem与UIMutableApplicationShortcutItem
UIApplicationShortcutItem
@interface UIApplicationShortcutItem : NSObject <NSCopying, NSMutableCopying>
- (instancetype)init NS_UNAVAILABLE;
- (instancetype)initWithType:(NSString *)type localizedTitle:(NSString *)localizedTitle localizedSubtitle:(nullable NSString *)localizedSubtitle icon:(nullable UIApplicationShortcutIcon *)icon userInfo:(nullable NSDictionary<NSString *, id <NSSecureCoding>> *)userInfo NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithType:(NSString *)type localizedTitle:(NSString *)localizedTitle;
...
UIMutableApplicationShortcutItem
@interface UIMutableApplicationShortcutItem : UIApplicationShortcutItem
// An application-specific string that identifies the type of action to perform.
@property (nonatomic, copy) NSString *type;
// Properties controlling how the item should be displayed on the home screen.
@property (nonatomic, copy) NSString *localizedTitle;
@property (nullable, nonatomic, copy) NSString *localizedSubtitle;
@property (nullable, nonatomic, copy) UIApplicationShortcutIcon *icon;
// Application-specific information needed to perform the action.
// Will throw an exception if the NSDictionary is not plist-encodable.
@property (nullable, nonatomic, copy) NSDictionary<NSString *, id <NSSecureCoding>> *userInfo;
// used with UISceneActivationConditions to customize what scene should be activated for a shortcut
@property (nullable, nonatomic, copy) id targetContentIdentifier;
@end
三、shortcutItems及跳转功能
通过配置需要当3DTouch按压显示的快捷ShortcutItem及跳转代码如下
#import "SD3DTouchManager.h"
#import "SDSessionManager.h"
static SD3DTouchManager *shareInstance = nil;
@implementation SD3DTouchManager
+ (instancetype)sharedInstance {
static dispatch_once_t onceToken = 0;
dispatch_once(&onceToken, ^{
shareInstance = [[SD3DTouchManager alloc] init];
});
return shareInstance;
}
- (void)creat3DShortcutItem {
if (IS_IOS9_OR_LATER) {
UIApplicationShortcutIcon *sendIcon = [UIApplicationShortcutIcon iconWithTemplateImageName:@"ic_bar_search"];
UIApplicationShortcutItem *sendItem = [[UIApplicationShortcutItem alloc]initWithType:SD_3D_WE_SEND localizedTitle:@"找代送" localizedSubtitle:nil icon:sendIcon userInfo:nil];
UIApplicationShortcutIcon *buyIcon = [UIApplicationShortcutIcon iconWithTemplateImageName:@"ic_note_comment"];
UIApplicationShortcutItem *buyItem = [[UIApplicationShortcutItem alloc]initWithType:SD_3D_WE_BUY localizedTitle:@"找代买" localizedSubtitle:nil icon:buyIcon userInfo:nil];
UIApplicationShortcutIcon *rechargeIcon = [UIApplicationShortcutIcon iconWithTemplateImageName:@"ic_note_tag"];
UIApplicationShortcutItem *rechargeItem = [[UIApplicationShortcutItem alloc]initWithType:SD_3D_RECHARGE localizedTitle:@"一键充值" localizedSubtitle:nil icon:rechargeIcon userInfo:nil];
UIApplicationShortcutIcon *profileIcon = [UIApplicationShortcutIcon iconWithTemplateImageName:@"ic_mine"];
UIApplicationShortcutItem *profileItem = [[UIApplicationShortcutItem alloc]initWithType:SD_3D_RECHARGE localizedTitle:@"我的信息" localizedSubtitle:nil icon:profileIcon userInfo:nil];
[UIApplication sharedApplication].shortcutItems = @[sendItem,buyItem,rechargeItem,profileItem];
}
}
- (BOOL)application3DShortcutOptions:(NSDictionary *)launchOptions {
BOOL luanched = YES;
if (IS_IOS9_OR_LATER) {
UIApplicationShortcutItem *shortcutItem = [launchOptions valueForKey:UIApplicationLaunchOptionsShortcutItemKey];
if (shortcutItem) {
//判断设置的快捷选项标签唯一标识,根据不同标识执行不同操作
[self apply3DTouch:shortcutItem];
luanched = NO;
}
}
return luanched;
}
- (void)apply3DTouch:(UIApplicationShortcutItem *)shortcutItem {
if ([SDSessionManager shareInstance].isLogin) {
UIViewController *controller = [UIApplication sharedApplication].keyWindow.rootViewController;
UINavigationController *navigationController;
if ([controller isKindOfClass:[UINavigationController class]]) {
navigationController = (UINavigationController *)controller;
} else {
navigationController = controller.navigationController;
}
if ([shortcutItem.type isEqualToString:SD_3D_WE_SEND]) {
DLog(@"3D 进入代送页面");
} else if ([shortcutItem.type isEqualToString:SD_3D_WE_BUY]) {
DLog(@"3D 进入代买页面");
} else if ([shortcutItem.type isEqualToString:SD_3D_RECHARGE]) {
DLog(@"3D 进入充值页面");
} else if ([shortcutItem.type isEqualToString:SD_3D_MIME_INFO]) {
DLog(@"3D 进入我的信息页面");
}
}
}
@end
在AppDelegate的didFinishLaunchingWithOptions初始化
//设置3D touch
[[SD3DTouchManager sharedInstance] creat3DShortcutItem];
实现跳转performActionForShortcutItem
#pragma mark - 3D Touch
//如果APP没被杀死,还存在后台,点开Touch会调用该代理方法
- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler {
if (shortcutItem) {
//判断设置的快捷选项标签唯一标识,根据不同标识执行不同操作
[[SD3DTouchManager sharedInstance] apply3DTouch:shortcutItem];
}
if (completionHandler) {
completionHandler(YES);
}
}
四、小结
iOS开发-实现3DTouch按压App快捷选项shortcutItems及跳转功能
App的应用图标通过3D Touch按压App图标,会显示快捷选项,点击选项可快速进入到App的特定页面。
学习记录,每天不停进步。