快速集成3D Touch,针对不同的用户,不同包显示不同的3D Touch

来源:互联网 发布:淘宝三颗心要多少好评 编辑:程序博客网 时间:2024/05/22 07:50

第一步:在application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions方法里面设置根控制器,这是都知道的

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];    self.window.backgroundColor = [UIColor whiteColor];    NSString *key = @"CFBundleShortVersionString";    // 上一次的使用版本(存储在沙盒中的版本号)    NSString *oldVersion = [[NSUserDefaults standardUserDefaults] objectForKey:version];    // 当前软件的版本号(从Info.plist中获得)    NSString *currentVersion = [NSBundle mainBundle].infoDictionary[key];    if ([currentVersion isEqualToString:oldVersion]) { // 版本号相同:这次打开和上次打开的是同一个版本        //自动获取跟控制器,此方法内部做初始化3dtouch处理        UIViewController *root = [BWJGetRootController autoGetRootController];        //设置广告页        [self setupXHLaunchAd];        self.window.rootViewController = root;    } else { // 这次打开的版本和上一次不一样,显示新特性        // 将当前的版本号存进沙盒        [[NSUserDefaults standardUserDefaults] setObject:currentVersion forKey:version];        [[NSUserDefaults standardUserDefaults] synchronize];        self.window.rootViewController = [[BWJNewfeatureController alloc] init];    }    [self.window makeKeyAndVisible];

第二步:在自动获取跟控制器的工具类(BWJGetRootController)做是否显示3DTouch的判断(3D是ios9.0以上版本才可以使用)

//此方法在新特性页面点击后也会调用,所以只有初始化的tabbar的根控制器才会初始化3dtouch+ (UIViewController *)autoGetRootController {    homeController *tabBarController = [[homeController alloc]init];    if (IOS9) {//版本大于9.0 初始化3dtouch        AppDelegate *appdelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;        [appdelegate setUp3DtouhWithApplication:[UIApplication sharedApplication]];    }    return  tabBarController;}

第三步:创建appdelegate分类(AppDelegate+BWJ3Dtouch)

.h文件声明一个方法初始化3dtouch#import "AppDelegate.h"@interface AppDelegate (BWJ3Dtouch)- (void)setUp3DtouhWithApplication:(UIApplication *)application;@end
.m文件实现方法初始化3dtouch- (void)setUp3DtouhWithApplication:(UIApplication *)application {    UIApplicationShortcutIcon *icon1 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"touch_mall"];    UIMutableApplicationShortcutItem *item1 = [[UIMutableApplicationShortcutItem alloc]initWithType:BWJ3DTouchTypeOne localizedTitle:BWJAppType == BWJBundleTypeBaiWujie ? @"百物街商城":@"商城" localizedSubtitle:@"" icon:icon1 userInfo:nil];    UIApplicationShortcutIcon *icon2 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"touch_discovery"];    UIMutableApplicationShortcutItem *item2 = [[UIMutableApplicationShortcutItem alloc]initWithType:BWJ3DTouchTypeTwo localizedTitle:@"动态" localizedSubtitle:@"" icon:icon2 userInfo:nil];    UIApplicationShortcutIcon *icon3 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"touch_order"];    UIMutableApplicationShortcutItem *item3 = [[UIMutableApplicationShortcutItem alloc]initWithType:BWJ3DTouchTypeThree localizedTitle:@"我的订单" localizedSubtitle:@"" icon:icon3 userInfo:nil];    UIApplicationShortcutIcon *icon4 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"touch_announced"];    UIMutableApplicationShortcutItem *item4 = [[UIMutableApplicationShortcutItem alloc]initWithType:BWJ3DTouchTypeFour localizedTitle:@"揭晓" localizedSubtitle:@"" icon:icon4 userInfo:nil];    UIApplicationShortcutIcon *icon5 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"touch_live"];    UIMutableApplicationShortcutItem *item5 = [[UIMutableApplicationShortcutItem alloc]initWithType:BWJ3DTouchTypeFive localizedTitle:@"我要直播" localizedSubtitle:@"" icon:icon5 userInfo:nil];    UIApplicationShortcutIcon *icon6 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"touch_wallet"];    UIMutableApplicationShortcutItem *item6 = [[UIMutableApplicationShortcutItem alloc]initWithType:BWJ3DTouchTypeSix localizedTitle:@"我的钱包" localizedSubtitle:@"" icon:icon6 userInfo:nil];    NSArray *items;    if ([BWJUserDefault getConfigInfo].iospay_version == IAPVersion) {//审核状态判断显示哪些        if (BWJAppType == BWJBundleTypeBaiWujie) {            items = @[item1, item2, item3];        } else {            items = @[item1, item3];        }    } else {        if ([BWJUserDefault getUserInfo].auth == 1 || ([BWJUserDefault getUserInfo].auth == 0 && [[BWJUserDefault getUserInfo].auth_info.status isEqualToString:@"1"])) {//百物街主播用户            if (BWJAppType == BWJBundleTypeBaiWujie) {//百物街主包                items = @[item1, item4, item6, item5];            } else {//马甲包                items = @[item1, item4 ,item3, item6];            }        } else {//非主播用户            if (BWJAppType == BWJBundleTypeBaiWujie) {//百物街主包                items = @[item1, item4, item6, item3];            } else {                items = @[item1, item4, item6, item3];            }        }    }    //设置3Dtouch数组    application.shortcutItems = items;}
在.m文件实现3dtouch的点击事件- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler {    homeController *home = (homeController *)self.window.rootViewController;    BWJNavigationController *navigationController = (BWJNavigationController *)home.selectViewController;    NSInteger count = navigationController.viewControllers.count;    UIViewController *vc = navigationController.viewControllers[count - 1];    NSString *type = shortcutItem.type;    if ([type isEqualToString:BWJ3DTouchTypeOne]) {        if ([BWJUserDefault getUserInfo].ID.length) {            if ([vc isKindOfClass:[BWJHomeBaseController class]]) {//如果栈上面是这个控制器,直接进入                //发通知选择商城                [[NSNotificationCenter defaultCenter] postNotificationName:BWJ3DTouchToMallNotification object:nil];                return;            }            AppDelegate *delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;            [delegate.tabBarController hideTabBar:NO];            [navigationController popToRootViewControllerAnimated:NO];            [delegate.tabBarController touchBtnAtIndex:0];            [[NSNotificationCenter defaultCenter] postNotificationName:BWJ3DTouchToMallNotification object:nil];        }    } else if ([type isEqualToString:BWJ3DTouchTypeTwo]){        if ([BWJUserDefault getUserInfo].ID.length) {            if ([vc isKindOfClass:[BWJDiscoveryBaseController class]]) {//如果栈上面是这个控制器,直接进入                //发通知选中动态               [[NSNotificationCenter defaultCenter] postNotificationName:BWJ3DTouchToDiscoveryNotification object:nil];                return;            }            AppDelegate *delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;            [delegate.tabBarController hideTabBar:NO];            [navigationController popToRootViewControllerAnimated:NO];            [delegate.tabBarController touchBtnAtIndex:2];        }    } else if ([type isEqualToString:BWJ3DTouchTypeThree]) {        if ([BWJUserDefault getUserInfo].ID.length) {            if ([vc isKindOfClass:[BWJMyOrderMainController class]]) {                return;            }            BWJMyOrderMainController *myOrder = [[BWJMyOrderMainController alloc] init];            [navigationController pushViewController:myOrder animated:YES];        }    } else if ([type isEqualToString:BWJ3DTouchTypeFour]) {        if ([BWJUserDefault getUserInfo].ID.length) {            if ([vc isKindOfClass:[BWJAnnoucedBaseController class]]) {//如果栈上面是这个控制器,直接进入                //发通知选中动态                [[NSNotificationCenter defaultCenter] postNotificationName:BWJ3DTouchToAnnoucedNotification object:nil];                return;            }            AppDelegate *delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;            [delegate.tabBarController hideTabBar:NO];            [navigationController popToRootViewControllerAnimated:NO];            [delegate.tabBarController touchBtnAtIndex:1];        }    } else if ([type isEqualToString:BWJ3DTouchTypeFive]) {        if ([BWJUserDefault getUserInfo].ID.length) {            if ([vc isKindOfClass:[startplay class]] || [vc isKindOfClass:[LiveShow class]] || [vc isKindOfClass:[BWJChooseProductController class]]) {//如果栈上面是这个控制器,直接进入                return;            }            for (UIViewController *vc in navigationController.viewControllers) {                if ([vc isKindOfClass:[moviePlay class]]) {                    [BWJTipsVew showTipsViewWithString:@"请先退出直播间再开播哦!"];                    return;                }            }            [navigationController popToRootViewControllerAnimated:NO];            AppDelegate *appdelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;            [appdelegate.tabBarController touchBtnAtIndex:2];        }    } else {        if ([BWJUserDefault getUserInfo].ID.length) {            if ([vc isKindOfClass:[BWJMyWalletViewController class]]) {                return;            }            BWJMyWalletViewController *myWallet = [[BWJMyWalletViewController alloc] init];            [navigationController pushViewController:myWallet animated:YES];        }    }}

//这样就大功告成了,来看看效果图
主播显示的3dtouch
主播显示的3dtouch

用户显示的3dtouch
用户显示的3dtouch

马甲包显示的3dtouch
马甲包显示的3dtouch