初识3D Touch

3D Touch 


 

概述:

 从.Net转来也快有半年之多了,从小生到现在也算是经历了无所bug了,不过还是打到不了Ios在我心目中的地位!!!

一、前言

 在iphone6s问世之后,很多果粉都争先要体验3D Touch给用户带来的额外维度上的交互,这个设计之所以叫做3D Touch,其原理上是增加了一个压力的感触,通过区分轻按和重按来进行不同的用户交互。但是对于开发人员来说我们确实遇到了一个难题:xcode7是支持3D Touch开发的,可是模拟器并不支持这个手势

 不过还好的是,在我们码农界的大神们开发了一个对于此bug的插件,那就是SBShortcutMenuSimulator

二、主题 

  好了,我们废话不多说先看看我们项目的预期样子吧!

   

 

   之所以是用这个项目来测试,是因为以前在自学的时候,这是人生中的第一个Ios项目,经久不忘啊!

   源代码:https://github.com/LitterL/Litter_Lottery

三、开撸

     1、开撸之前我们来看两个方法:

//程序的入口
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    return YES;
}

 这一个方法为程序的入口也就是初始化窗口的地方,然而也是我们初始化3D Touchview按钮显示在地方

//3D Touch响应事件
-(void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler
{
}

这一个方法为3D Touch响应事件也就是我在桌面使用捷径3D Touch选择某一处view按钮的时候会调用得事件

 


 

  2、了解上面两个方法之后我们就开始正式的撸代码了,首先我们想要加载3D Touch按钮,那么我们就可以在程序的入口的方法中给UIApplication一个shortcutItems的属性赋值,其实这个属性也就是存放在3D Touch显示的每一个view按钮的集合,而它里面放着的就是UIApplicationShortcutItem 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//    UIApplicationShortcutIcon为创建显示的图片的类
//    创建图片一共有两种方式  一种使用系统的图片  一种使用自定义的图片
//    iconWithType:这个类方法为系统方法
//    iconWithTemplateImageName:这个为自己创建的方法
    
    UIApplicationShortcutIcon *icon0 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeCompose ];
    
//    initWithType:用作以后响应的时候判断
//    localizedTitle:在3DTouch中显示的文字
//    localizedSubtitle:子标题
//    icon:图片
//    userInfo:传入的其余信息
    UIApplicationShortcutItem *item0 =[[UIApplicationShortcutItem alloc]initWithType:@"hall" localizedTitle:@"购彩大厅" localizedSubtitle:nil icon:icon0 userInfo:nil];
    
    UIApplicationShortcutIcon *icon1 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeAdd ];
    UIApplicationShortcutItem *item1 =[[UIApplicationShortcutItem alloc]initWithType:@"are" localizedTitle:@"竞技场" localizedSubtitle:nil icon:icon1 userInfo:nil];
    
    UIApplicationShortcutIcon *icon2 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeSearch ];
    UIApplicationShortcutItem *item2 =[[UIApplicationShortcutItem alloc]initWithType:@"his" localizedTitle:@"开奖信息" localizedSubtitle:nil icon:icon2 userInfo:nil];
    
    UIApplicationShortcutIcon *icon3 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypePlay];
    UIApplicationShortcutItem *item3 =[[UIApplicationShortcutItem alloc]initWithType:@"mylottery" localizedTitle:@"我的彩票" localizedSubtitle:nil icon:icon3 userInfo:nil];
    //添加shortcutItems
    application.shortcutItems= @[item0,item1,item2,item3];
    return YES;
}

     3、UIApplicationShortcutIcon 为创建显示的图片的类

       创建图片一共有两种方式 :

       1、一种使用系统的图片 

         + (instancetype)iconWithType:(UIApplicationShortcutIconType)type;

          其中UIApplicationShortcutIconType中有默认的这几个         

           UIApplicationShortcutIconTypeCompose,//编辑的图标
               UIApplicationShortcutIconTypePlay,//播放图标
              UIApplicationShortcutIconTypePause,//暂停图标
              UIApplicationShortcutIconTypeAdd,//添加图标
              UIApplicationShortcutIconTypeLocation,//定位图标
              UIApplicationShortcutIconTypeSearch,//搜索图标
              UIApplicationShortcutIconTypeShare//分享图标

       2、一种使用自定义的图片

        + (instancetype)iconWithTemplateImageName:(NSString *)templateImageName;

 4、UIApplicationShortcutItem 为创建显示view里面包含图片以及文字

      1、创建也有两种方式 第一种

         因为很长这里简写了 :

        initWithType:@"are" localizedTitle:@"竞技场localizedSubtitle:nil icon:icon1 userInfo:nil    

            initWithType:用作以后响应的时候判断

            localizedTitle:在3DTouch中显示的文字

            localizedSubtitle:子标题

            icon:图片

            userInfo:传入的其余信息

     1、创建也有两种方式 第二种  

        initWithType:用作以后响应的时候判断

            localizedTitle:在3DTouch中显示的文字

       - (instancetype)initWithType:(NSString *)type localizedTitle:(NSString *)localizedTitle;

 


          
    只要完成上述情况 那么你应该能看到这张图片了

           

  5、那么在最后我们来完成如何响应事件:

-(void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler
{
//为显示第几页数据
    int i=0;
    if ([shortcutItem.type isEqualToString:@"hall"]) {
        i=0;
    }else if([shortcutItem.type isEqualToString:@"are"]) {
        i=1;
    }else if([shortcutItem.type isEqualToString:@"his"]) {
        i=3;
    }else if([shortcutItem.type isEqualToString:@"mylottery"]) {
        i=4;
    }
//    不管我点击的是谁 我都调用TabBar  只不过我传入了索引
    LitterLTabBarController *tabBar = [LitterLTabBarController TabBarSelectIndex:i];
//最后把控制器设置为根控制器
    self.window.rootViewController = tabBar;
}

  在我的项目中它根控制器为UITabBarController控制器,再加上我在先前创建3D Touch的时候传入过initWithType,所以当我在外部使用3D Touch快速进入的时候,通过他的initWithType判断我的索引,前提我自己是知道它的索引的,在之后我把传入的索引作为UITabBarControllerselectedIndex也就是开始展示的控制器,那么我们的整个就算是完事了

 


 

               本章到此结束  

           欢迎各位码友随意转载并指正   😊😊😊

           源代码:https://github.com/LitterL/Litter_Lottery   

posted @ 2016-01-10 23:33  周大萌的萌  阅读(1225)  评论(0编辑  收藏  举报