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.
 
 
 
 

405 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 "WCADView.h"
#import "JCManager.h"
#import "WatchHomeViewController.h"
#import "HomeMessageViewController.h"
#import "MyViewController.h"
#import "MapViewController.h"
#import "TabBarVideoViewController.h"
#import "VideoTabPopView.h"
#import "CommonPopView.h"
@interface MyTabBarViewController ()<UITabBarControllerDelegate>{
UIView *launchView;
NSString *LaunchImageName;
}
@property (nonatomic,strong) UIImageView *bottomView;
@property (nonatomic,strong) UIWindow *subWin;
//@property (nonatomic,strong) GDTSplashAd *splash;
@property (nonatomic,strong) UIImageView *TransitionImageView;
@end
@implementation MyTabBarViewController
-(void)removeTransitionImageView{
if(_TransitionImageView){
// xLog(@"开始-0----------");
[UIView animateWithDuration:1 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
_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(), ^{
[_TransitionImageView removeFromSuperview];
_TransitionImageView = nil;
});
}
}];
}
}
- (void)viewDidLoad {
[super viewDidLoad];
[self addNotification];
// WEAKSELF
// dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// NSMutableArray* arr = [NSMutableArray arrayWithArray: weakSelf.viewControllers];
// [arr removeObjectAtIndex:1];
// [weakSelf setViewControllers:arr];
// });
if(!cUser){
return;
}
[self.tabBar setBackgroundImage:[UIImage new]];
[self.tabBar setShadowImage:[UIImage new]];
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.delegate = self;
[self addChildViewControllers];
[self addTabarItems];
[self changeShadowImage];
}
- (void)addChildViewControllers
{
ZXNavigationBarNavigationController *homeMsgVC = [[ZXNavigationBarNavigationController alloc] initWithRootViewController:[HomeMessageViewController new]];
ZXNavigationBarNavigationController *homeVC = [[ZXNavigationBarNavigationController alloc] initWithRootViewController:[WatchHomeViewController new]];
ZXNavigationBarNavigationController *videoVC = [[ZXNavigationBarNavigationController alloc] initWithRootViewController:[TabBarVideoViewController new]];
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"MapViewController"];
ZXNavigationBarNavigationController *mapVC = [[ZXNavigationBarNavigationController alloc] initWithRootViewController:vc];
ZXNavigationBarNavigationController *myVC = [[ZXNavigationBarNavigationController alloc] initWithRootViewController:[MyViewController new]];
self.viewControllers = @[homeMsgVC, mapVC, videoVC, homeVC, myVC];
self.tabBar.tintColor = mainColor;
}
- (void)addTabarItems
{
NSArray *titleNames = @[@"聊天",
@"定位",
@"",
@"守护",
@"我的"];
NSArray *normalImages = @[@"tab_message_nor",
@"tab_positioning_nor",
iPhoneX ? @"tab_call_icon" : @"tab_call_icon_n",
@"tab_首页_nor",
@"tab_我的_nor"];
NSArray *selectedImages = @[@"tab_message_sel",
@"tab_positioning_sel",
iPhoneX ? @"tab_call_icon" : @"tab_call_icon_n",
@"tab_首页_sel",
@"tab_我的_sel"];
//SNJJSELF
[self.childViewControllers enumerateObjectsUsingBlock:^(UIViewController *obj, NSUInteger idx, BOOL *stop) {
obj.tabBarItem.title = [titleNames objectAtIndex:idx];
obj.tabBarItem.image = [[UIImage imageNamed:normalImages[idx]] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
obj.tabBarItem.selectedImage = [[UIImage imageNamed:selectedImages[idx]] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
}];
self.tabBar.tintColor = mainColor;
if (@available(iOS 13.0, *))
{
self.tabBar.unselectedItemTintColor = RGB(98, 100, 102);
self.tabBar.tintColor = mainColor;
self.tabBar.backgroundColor = UIColor.whiteColor;
}
else
{
self.tabBar.backgroundColor = UIColor.whiteColor;
[[UITabBarItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName: RGB(98, 100, 102)} forState:UIControlStateNormal];
[[UITabBarItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName: mainColor} forState:UIControlStateSelected];
}
}
- (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 (launchView) {
[UIView animateWithDuration:1.0f animations:^{
launchView.alpha = 0.0f;
} completion:^(BOOL finished) {
[launchView removeFromSuperview];
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"]]) {
[UICommon MessageErrorText:@"该设备已经恢复出厂设置"];
[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;
AppDelegate *app = (AppDelegate *)[UIApplication sharedApplication].delegate;
[app showRootViewController];
// UIStoryboard *addDeviceSB = [UIStoryboard storyboardWithName:@"LoginStoryboard" bundle:nil];
// ZXNavigationBarNavigationController *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{
}
-(BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController{
UINavigationController *selectNav = (UINavigationController*)viewController;
if ((cUser.myDevices.count == 0 && [NSStringFromClass([selectNav.topViewController class]) isEqualToString:@"MapViewController"]) ||
(cUser.myDevices.count == 0 && [NSStringFromClass([selectNav.topViewController class]) isEqualToString:@"TabBarVideoViewController"]))
{
//要跳 定位页面
WEAKSELF
CommonPopView *popView = [CommonPopView new];
[popView subPopView:popViewType_binding PopTitle:@"绑定设备" PopText:@"未绑定设备,是否前往绑定?" okTouchBlock:^{
// weakSelf.selectedIndex = 3;
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"LoginStoryboard" bundle:nil];
UINavigationController *vc = [sb instantiateViewControllerWithIdentifier:@"ScanCodeViewController"];
[[UICommon currentVC].navigationController pushViewController:vc animated:YES];
}];
return NO;
}
if ([NSStringFromClass([selectNav.topViewController class]) isEqualToString:@"TabBarVideoViewController"])
{
NSLog(@"点击拨打视频电话");
//[self.popView showView];
VideoTabPopView *popView = [[VideoTabPopView alloc] init];
[popView showView];
return NO;
}
return YES;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (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] = [UIFont systemFontOfSize:11];
[item setTitleTextAttributes:attrnor forState:UIControlStateNormal];
}
+ (void)initialize
{
//Tabbar不透明
[UITabBar appearance].translucent = NO;
//Tabbar黑色
[UITabBar appearance].backgroundImage = [self imageWithColor:UIColor.whiteColor];
//隐藏Tabbar分割线
UIImage *clearImage = [self imageWithColor:UIColor.whiteColor];
[[UITabBar appearance] setShadowImage:clearImage];
//TableView适配
[UITableView appearance].estimatedRowHeight = 0;
[UITableView appearance].estimatedSectionHeaderHeight = 0;
[UITableView appearance].estimatedSectionFooterHeight = 0;
//ScrollView适配
if (@available(iOS 11.0, *)){
[[UIScrollView appearance] setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever];
}
}
+ (UIImage*)imageWithColor:(UIColor*)color
{
CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, rect);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
//实现中间按钮放大的关键代码
- (void)viewWillLayoutSubviews
{
for (int i = 0; i<self.tabBar.items.count; i ++)
{
UITabBarItem *itm = self.tabBar.items[i];
if (i == 2)
{
itm.imageInsets = UIEdgeInsetsMake(0, -5, -7, -5);
}
}
}
-(UITabBarItem*)generateTabBarItem:(NSString*)title imgName:(NSString*)imgName selectedImgName:(NSString*)selectedImgName
{
UIImage *img = [[UIImage imageNamed:imgName] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIImage *selectedImg = [[UIImage imageNamed:selectedImgName] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
return [[UITabBarItem alloc] initWithTitle:title image:img selectedImage:selectedImg];
}
/// 修改线条的颜色
- (void)changeShadowImage
{
if (@available(iOS 13, *))
{
UIColor *color = [UIColor whiteColor];
UITabBarAppearance *appearance = [self.tabBar.standardAppearance copy];
appearance.backgroundImage = [UICommon imageWithColor:UIColor.clearColor];
appearance.shadowImage = [UICommon imageWithColor:RGB(240, 240, 240)];
appearance.shadowColor = color;
// 重置背景和阴影为透明 如果设置了阴影效果则此代码需要去掉
// [appearance configureWithTransparentBackground];
self.tabBar.standardAppearance = appearance;
if (@available(iOS 15.0, *)) {
self.tabBar.scrollEdgeAppearance = appearance;
} else {
// Fallback on earlier versions
}
} else {
self.tabBar.backgroundImage = [UIImage new];
self.tabBar.shadowImage = [UIImage new];
}
}
@end