ios 3D Touch 的使用

         3D Touch是苹果在2015年秋季发布会上发布了iPhone 6S的新功能,具体功能是用力按一个图标会弹出一层半透明菜单,里面包含了该应用下的一些快捷操作.

      下面和大家分享一下简单的实现
1、静态标签
静态标签是我们在项目的配置plist文件中配置的标签,在用户安装程序后就可以使用,并且排序会在动态标签的前面。
我们先来看静态标签的配置:
首先,在info.plist文件中添加如下键值(我在测试的时候,系统并没有提示,只能手打上去):

ios 3D Touch 的使用_第1张图片


先添加了一个UIApplicationShortcutItems的数组,这个数组中添加的元素就是对应的静态标签,在每个标签中我们需要添加一些设置的键值:
必填项(下面两个键值是必须设置的):
UIApplicationShortcutItemType 这个键值设置一个快捷通道类型的字符串
UIApplicationShortcutItemTitle 这个键值设置标签的标题
选填项(下面这些键值不是必须设置的) :
UIApplicationShortcutItemSubtitle 设置标签的副标题
UIApplicationShortcutItemIconType 设置标签Icon类型
UIApplicationShortcutItemIconFile 设置标签的Icon文件
UIApplicationShortcutItemUserInfo 设置信息字典(用于传值)
我们如上截图设置后,运行程序,用我们前面的方法进行测试,效果如下:

ios 3D Touch 的使用_第2张图片

2、动态标签
动态标签是我们在程序中,通过代码添加的,与之相关的类,主要有三个:
UIApplicationShortcutItem 创建3DTouch标签的类
UIMutableApplicationShortcutItem 创建可变的3DTouch标签的类
UIApplicationShortcutIcon 创建标签中图片Icon的类
在AppDelegate.m文件中

@interface AppDelegate ()
@property(nonatomic,strong)TabBarViewController  *tabBar;
@property(nonatomic,strong)RZSportsVC *picker1;
@property(nonatomic,strong)LJHNewRunViewController1 *LJHVC;
@end



 
   
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//查看系统版本号
CGFloat currentDeviceVersionFloat = [[[UIDevice currentDevice] systemVersion] floatValue];
    if (currentDeviceVersionFloat >= 9.0) {
        UIApplicationShortcutIcon *iconFitness = [UIApplicationShortcutIcon iconWithTemplateImageName:@"健身训练"];
        //菜单文字
        UIMutableApplicationShortcutItem *itemFitness = [[UIMutableApplicationShortcutItem alloc] initWithType:@"1" localizedTitle:@"健身训练"];
        //绑定信息到指定菜单
        itemFitness.icon = iconFitness;
        
        // 菜单图标
        UIApplicationShortcutIcon *iconRun = [UIApplicationShortcutIcon iconWithTemplateImageName:@"跑步"];
        //菜单文字
        UIMutableApplicationShortcutItem *itemRun = [[UIMutableApplicationShortcutItem alloc] initWithType:@"2" localizedTitle:@"户外跑步"];
        //绑定信息到指定菜单
        itemRun.icon = iconRun;
        //绑定到App icon
        application.shortcutItems = @[itemFitness,itemRun];
    }
      return YES;

}

响应事件如下
- (void)application:(UIApplication *)application performActionForShortcutItem:(nonnull UIApplicationShortcutItem *)shortcutItem completionHandler:(nonnull void (^)(BOOL))completionHandler{
    //点击第一条
    if ([shortcutItem.type isEqualToString:@"1"]) {
    UINavigationController *myNavi = self.window.rootViewController.childViewControllers[0];
        _tabBar.selectedIndex = 0;
        _picker1 = [[RZSportsVC alloc]init];
        //如果已经进入到界面里面,先返回在进入这个界面,避免重复进入同一个界面
        if ([[NSUserDefaults standardUserDefaults]boolForKey:@"3d"]) {//在进入界面之后要保存一个BOOL值,已经由3d Touch 进入的,界面消失的时候将它移除掉
            [myNavi popViewControllerAnimated:NO];
            [myNavi pushViewController:_picker1 animated:YES ];
        }else{
         [myNavi pushViewController:_picker1 animated:YES ];
        
        }
        
    }
    //点击第二条
    if ([shortcutItem.type isEqualToString:@"2"]) {
        UINavigationController *myNavi = self.window.rootViewController.childViewControllers[1];
        _tabBar.selectedIndex = 1;
        _LJHVC = [[LJHNewRunViewController1 alloc]init];
        if ([[NSUserDefaults standardUserDefaults]boolForKey:@"3d1"]) {//在进入界面之后要保存一个BOOL值,已经由3d Touch 进入的,界面消失的时候将它移除掉
            [myNavi popViewControllerAnimated:NO];
            [myNavi pushViewController:_LJHVC animated:YES ];
        }else{
            
        [myNavi pushViewController:_LJHVC animated:YES ];
        
        }
        
    }
   
    
}

效果如下:


ios 3D Touch 的使用_第3张图片

           细心的小伙伴会发现,在效果图中没有分享的选项, 这并不是我没有做,当然也是没有做,但是当你的app上架之后,这个选项就会自动合成了,所以不用担心这个选项.


你可能感兴趣的:(ios)