简介

iOS从iPhone6s、iOS9加入了3D Touch功能,支持通过对屏幕施加不同程度的压力来访问快捷入口和附加功能,见下图。

ios 原生调支付宝 苹果支付宝3dtouch改菜单_搜索


ios 原生调支付宝 苹果支付宝3dtouch改菜单_ios 原生调支付宝_02

3D Touch的使用场景

  • 快捷菜单,快捷入口,快速访问程序的功能比如扫一扫、签到、我的订单
  • 预览和弹出

快捷菜单的实现

支持两种方式添加快捷菜单

- 在项目的.plist 文件中添加

ios 原生调支付宝 苹果支付宝3dtouch改菜单_ico_03


- 通过代码动态注册

可以在AppDelegate的启动方法里面初始化3DTouch菜单

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    //初始化3DTouch
    NSMutableArray *arrShortcutItem=[[NSMutableArray alloc] init];      
    UIApplicationShortcutItem *shortcutItemSearch=[[UIApplicationShortcutItem alloc] initWithType:@"test.search" localizedTitle:@"搜索" localizedSubtitle:nil icon:[UIApplicationShortcutIcon iconWithTemplateImageName:@"icon_shortcut_search.png"]userInfo:nil];
    [arrShortcutItem addObject:shortcutItemSearch];
    [UIApplication sharedApplication].shortcutItems=arrShortcutItem;
}

响应菜单点击事件

重写AppDelegate里的performActionForShortcutItem方法来响应点击

-(void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler
{
    if([shortcutItem.type isEqualToString:@"test.search"])
    {
        //跳转到搜索页面
        NSLog(@"跳转到搜索");
    }
}

适配低版本系统和设备

如果你认为通过以上两种方式添加完快捷菜单就完成了工作,那就too young了,接下来还要考虑 适配的问题。因为这东西是从6s、iOS9才出现的。如果你是通过第一种方式 在项目的.plist文件中添加的快捷菜单,那恭喜你你不需要考虑适配问题,因为这种方式苹果已经帮我适配好了,如果你是通过第二种代码动态添加的方式,那就要考虑适配,否则在低版本的系统iOS9以下会崩溃。
通过代码动态注册主要考虑
- 系统是否开启了3dtouch,没开启,就没必要添加菜单
- 设备和系统是否支持3DTOUCH,不支持也不要添加
代码如下

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

    //forceTouchCapability 这个属性表示是否支持3DTouch 是iOS9才有的 调用之前要判断一下,有没有这个属性
    if ([self.window.rootViewController respondsToSelector:@selector(traitCollection)]&&[self.window.rootViewController.traitCollection respondsToSelector:@selector(forceTouchCapability)]){
        //判断是否支持3dtouch
        if(self.window.rootViewController.traitCollection.forceTouchCapability==UIForceTouchCapabilityAvailable){
            NSMutableArray *arrShortcutItem=[[NSMutableArray alloc] init];
            UIApplicationShortcutItem *shortcutItemSearch=[[UIApplicationShortcutItem alloc] initWithType:@"fumubang.search" localizedTitle:@"搜索" localizedSubtitle:nil icon:[UIApplicationShortcutIcon iconWithTemplateImageName:@"icon_shortcut_search.png"]userInfo:nil];
            [arrShortcutItem addObject:shortcutItemSearch];
            [UIApplication sharedApplication].shortcutItems=arrShortcutItem;
        }else{
            NSLog(@"不支持3dtouch");
        }
    }
}

其他

应用发布到应用商店,下载安装后,某个iOS版本的系统会默认给每个应用添加一个分享app的快捷菜单,所以我们不需要自己加分享app这个菜单,系统会自动附加。。。。