// // UITabBarViewController.m // myWatch // // Created by mobao on 15/10/9. // Copyright (c) 2015年 xTT. All rights reserved. // #import "MyTabBarViewController.h" #import "AppDelegate.h" #import "myHelper.h" #import "MyMQTT.h" #import "User.h" #import "MyTabBar.h" #import "JCManager.h" #import "WatchHomeViewController.h" #import "MoreViewController.h" #import "DiscoverViewController.h" #import "DeviceTabViewController.h" #import "MapViewController.h" #import "LoginViewController.h" #import "PhoneLoginViewController.h" #import "ForgetPwdViewController.h" #import "RegisteredViewController.h" @interface MyTabBarViewController (){ UIView *launchView; NSString *LaunchImageName; } //@property (nonatomic ,strong)WCADView *adView ; @property(nonatomic, strong) UIImageView *launchImageView; @property (nonatomic,strong) UIImageView *bottomView; @property (nonatomic,strong) UIWindow *subWin; //@property (nonatomic,strong) GDTSplashAd *splash; @property (nonatomic,strong) UIImageView *TransitionImageView; @property (nonatomic ,strong) MyTabBar *mytabbar; @property (nonatomic ,strong) MapViewController *mapvc; @end @implementation MyTabBarViewController - (void)viewDidLoad { [super viewDidLoad]; if (@available(iOS 15.0, *)) { UITabBarAppearance *barAppearance = [[UITabBarAppearance alloc] init]; barAppearance.backgroundEffect = nil; self.tabBar.scrollEdgeAppearance = barAppearance; self.tabBar.standardAppearance = barAppearance; } else { // Fallback on earlier versions [UITabBar appearance].translucent = NO; } [self addNotification]; self.delegate = self; self.mytabbar = [MyTabBar new]; self.mytabbar.coutn = 0; self.mytabbar.myTabBarDelegate = self; UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"WatchHomeViewController"]; [self addCustomChildVC:vc title:@"首页" imageName:@"icon_home" selectImageName:@"icon_home_select"]; [self addCustomChildVC:[DeviceTabViewController new] title:@"设备" imageName:@"icon_device" selectImageName:@"icon_device_select"]; self.mapvc = [sb instantiateViewControllerWithIdentifier:@"MapViewController"]; [self addCustomChildVC:self.mapvc title:@"定位" imageName:@"" selectImageName:@""]; [self addCustomChildVC:[[DiscoverViewController alloc] init] title:@"发现" imageName:@"icon_find" selectImageName:@"icon_find_select"]; //UIViewController *myVc = [sb instantiateViewControllerWithIdentifier:@"MyViewController"]; [self addCustomChildVC:[MoreViewController new] title:@"我的" imageName:@"icon_my" selectImageName:@"icon_my_select"]; [self setValue:self.mytabbar forKey:@"tabBar"]; if(!cUser){ return; } CGSize viewSize = self.view.bounds.size; NSString *viewOrientation = @"Portrait"; //横屏请设置成 @"Landscape" NSArray* imagesDict = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"UILaunchImages"]; for (NSDictionary* dict in imagesDict) { CGSize imageSize = CGSizeFromString(dict[@"UILaunchImageSize"]); if (CGSizeEqualToSize(imageSize, viewSize) && [viewOrientation isEqualToString:dict[@"UILaunchImageOrientation"]]) { LaunchImageName = dict[@"UILaunchImageName"]; } } if(!LaunchImageName) { if(ScreenHeight >= 812){ LaunchImageName = @"启动图X"; }else{ LaunchImageName = @"启动图"; } } //MARK: 有时会在首页显示之后再显示广告, 就是闪现首页,所以这里加个 View 做下过渡 会在首页加载完成数据后删除 _TransitionImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, ScreenWidth, ScreenHeight)]; _TransitionImageView.image = [UIImage imageNamed:LaunchImageName]; [self.view addSubview: _TransitionImageView]; } - (void)tabbarClickButton:(NSInteger)index { self.selectedIndex = index; if (cUser.myDevices.count == 0) { //要跳 定位页面 WEAKSELF weakSelf.selectedIndex = 0; self.mytabbar.buttonSelectON = NO; LGAlertView *alertView = [[LGAlertView alloc] initWithTitle:@"绑定设备" message:@"未绑定设备,是否前往绑定?" style:LGAlertViewStyleAlert buttonTitles:@[@"确定"] cancelButtonTitle:@"取消" destructiveButtonTitle:nil actionHandler:^(LGAlertView *alertView, NSString *title, NSUInteger index) { // add by lsz 2020-07-13 UIStoryboard *sb = [UIStoryboard storyboardWithName:@"LoginStoryboard" bundle:nil]; UINavigationController *vc = [sb instantiateViewControllerWithIdentifier:@"ScanCodeViewController"]; UINavigationController *homeNav = (UINavigationController*)weakSelf.viewControllers.firstObject; //获取 首页的 UINavigationController [homeNav pushViewController:vc animated:YES]; } cancelHandler:nil destructiveHandler:nil]; [alertView showAnimated:YES completionHandler:nil]; } } - (void)addCustomChildVC:(UIViewController *)vc title:(NSString *)title imageName:(NSString *)imageName selectImageName:(NSString *)selectImageName { vc.tabBarItem.title = title; vc.tabBarItem.image = [UIImage imageNamed:imageName]; vc.tabBarItem.image = [[UIImage imageNamed:imageName] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; vc.tabBarItem.selectedImage = [[UIImage imageNamed:selectImageName] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; ZXNavigationBarNavigationController *nav = [[ZXNavigationBarNavigationController alloc] initWithRootViewController:vc]; [self addChildViewController:nav]; } - (void)addNotification{ [[NSNotificationCenter defaultCenter] addObserverForName:@"outLogin" object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) { if(!cUser){ //如果 outLogin 推送前 用户信息已经没有了,那么就是 token无效的场景,清除密码 [UserDefaults setBool:NO forKey:kifRememberPWDKey]; [UserDefaults removeObjectForKey:@"lastpwd"]; } //清空推送角标 [UIApplication sharedApplication].applicationIconBadgeNumber = 0; [User setCurrentUser:nil]; //如果有菊风设备的,退出菊风SDK的推送 [[JCManager shared] uninitialize]; //退出登录,清除每天第一次登陆的记录 [UserDefaults removeObjectForKey:FirstEveryDayKey]; [self goLoginVCWithAnimate:YES]; if (self->launchView) { [UIView animateWithDuration:1.0f animations:^{ self->launchView.alpha = 0.0f; } completion:^(BOOL finished) { [self->launchView removeFromSuperview]; self->launchView = nil; }]; } }]; [[NSNotificationCenter defaultCenter] addObserverForName:PUSH_type_chatGroupDisband object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) { if (!cUser) { return; } if ([cUser.openid isEqualToString:note.object[@"operator"]]) { [SVProgressHUD showSuccessWithStatus:@"该设备已经恢复出厂设置"]; [cUser localDeleteDevice]; [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"lastLoginName"]; [[NSUserDefaults standardUserDefaults] synchronize]; sleep(1); [self goLoginVCWithAnimate:YES]; }else{ //如果是关注的设备,被管理员 恢复出厂设置了,需要清空一下聊天群,然后回到主页面重新 刷新数据 //清空 一下 聊天群组 cUser.chatGroups = nil; [self setSelectedIndex:0]; UINavigationController *navVC = (UINavigationController*)self.selectedViewController; [navVC popToRootViewControllerAnimated:YES]; } }]; } - (void)goLoginVCWithAnimate:(BOOL)animate{ //清空通知栏消息 //要先把BadgeNumber 设成跟当前不同的值,然后再设成0,就欧了; [UIApplication sharedApplication].applicationIconBadgeNumber = 1; [UIApplication sharedApplication].applicationIconBadgeNumber = 0; if(![[self getCurrentVC] isKindOfClass:[LoginViewController class]] && ![[self getCurrentVC] isKindOfClass:[PhoneLoginViewController class]] && ![[self getCurrentVC] isKindOfClass:[ForgetPwdViewController class]] && ![[self getCurrentVC] isKindOfClass:[RegisteredViewController class]]) { AppDelegate *app = (AppDelegate *)[UIApplication sharedApplication].delegate; [app showRootViewController]; } // UINavigationController *vc = [addDeviceSB instantiateViewControllerWithIdentifier:@"LoginNav"]; // vc.modalPresentationStyle = UIModalPresentationFullScreen; // [self presentViewController:vc animated:animate completion:^{ // [self.viewControllers enumerateObjectsUsingBlock:^(__kindof UINavigationController * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { // UIViewController *vc = [obj.viewControllers firstObject]; // [vc.navigationController popToRootViewControllerAnimated:YES]; // }]; // // if (self.selectedIndex != 0) { // self.selectedIndex = 0; // } // }]; } - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { self.mytabbar.buttonSelectON = self.selectedIndex == 2 ? YES : NO; } -(BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController { UINavigationController *selectNav = (UINavigationController*)viewController; if (cUser.myDevices.count == 0 && [NSStringFromClass([selectNav.topViewController class]) isEqualToString:@"DeviceTabViewController"]) { //要跳 定位页面 WEAKSELF weakSelf.selectedIndex = 0; LGAlertView *alertView = [[LGAlertView alloc] initWithTitle:@"绑定设备" message:@"未绑定设备,是否前往绑定?" style:LGAlertViewStyleAlert buttonTitles:@[@"确定"] cancelButtonTitle:@"取消" destructiveButtonTitle:nil actionHandler:^(LGAlertView *alertView, NSString *title, NSUInteger index) { // add by lsz 2020-07-13 UIStoryboard *sb = [UIStoryboard storyboardWithName:@"LoginStoryboard" bundle:nil]; UINavigationController *vc = [sb instantiateViewControllerWithIdentifier:@"ScanCodeViewController"]; UINavigationController *homeNav = (UINavigationController*)weakSelf.viewControllers.firstObject; //获取 首页的 UINavigationController [homeNav pushViewController:vc animated:YES]; } cancelHandler:nil destructiveHandler:nil]; [alertView showAnimated:YES completionHandler:nil]; return NO; } return YES; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } -(void)removeTransitionImageView { if(_TransitionImageView){ // xLog(@"开始-0----------"); [UIView animateWithDuration:1 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ self->_TransitionImageView.alpha = 0.0f; } completion:^(BOOL finished) { if(finished){ // xLog(@"结束-----------finished:%d",finished); dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [self->_TransitionImageView removeFromSuperview]; self->_TransitionImageView = nil; }); } }]; } } - (BOOL)shouldAutorotate { return [self.selectedViewController shouldAutorotate]; } - (UIInterfaceOrientationMask)supportedInterfaceOrientations { return [self.selectedViewController supportedInterfaceOrientations]; } - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { return [self.selectedViewController preferredInterfaceOrientationForPresentation]; } + (void)load { // 获取当前类的tabBarItem UITabBarItem *item = [UITabBarItem appearanceWhenContainedIn:self, nil]; NSMutableDictionary *attrnor = [NSMutableDictionary dictionary]; attrnor[NSFontAttributeName] = Font_(11); [item setTitleTextAttributes:attrnor forState:UIControlStateNormal]; } //获取当前屏幕显示的viewcontroller - (UIViewController *)getCurrentVC { UIViewController *rootViewController = [UIApplication sharedApplication].keyWindow.rootViewController; UIViewController *currentVC = [self getCurrentVCFrom:rootViewController]; return currentVC; } - (UIViewController *)getCurrentVCFrom:(UIViewController *)rootVC { UIViewController *currentVC; if ([rootVC presentedViewController]) { // 视图是被presented出来的 rootVC = [rootVC presentedViewController]; } if ([rootVC isKindOfClass:[UITabBarController class]]) { // 根视图为UITabBarController currentVC = [self getCurrentVCFrom:[(UITabBarController *)rootVC selectedViewController]]; } else if ([rootVC isKindOfClass:[UINavigationController class]]) { // 根视图为UINavigationController currentVC = [self getCurrentVCFrom:[(UINavigationController *)rootVC visibleViewController]]; } else { // 根视图为非导航类 currentVC = rootVC; } return currentVC; } @end