You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

360 lines
14 KiB

//
// 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 "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 ()<UITabBarControllerDelegate,MyTabBarDelegate>{
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) 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
{
ZXNavigationBarNavigationController *selectNav = (ZXNavigationBarNavigationController*)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