123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260 |
- //
- // RDSTabbarController.m
- // HealthPot
- //
- // Created by Rayson on 2019/7/10.
- // Copyright © 2019 RDIOT. All rights reserved.
- //
- #import "RDSTabbarController.h"
- #import "UIImage+Extension.h"
- #import "RDSHomeVC.h"
- #import "RDSRoomVC.h"
- #import "RDSFindVC.h"
- #import "RDSMyVC.h"
- #import "RDSResetDeviceVC.h"
- #import "RDSAddView.h"
- #import "SPAlertController.h"
- #import "PopView.h"
- #define TabBarVC @"vc" //--tabbar对应的视图控制器
- #define TabBarTitle @"title" //--tabbar标题
- #define TabBarImage @"image" //--未选中时tabbar的图片
- #define TabBarSelectedImage @"selectedImage" //--选中时tabbar的图片
- #define TabBarItemBadgeValue @"badgeValue" //--未读个数
- #define TabBarCount 4 //--tabbarItem的个数
- typedef NS_ENUM(NSInteger,RDSTabType) {
-
- // --这里的顺序,决定了 tabbar 从左到右item的显示顺序
- RDSTabTypeHome, // 首页
- RDSTabTypeRoom, // 房间
- //RDSTabTypeAdd, // 添加(只作占位用)
- RDSTabTypeFind, // 资讯
- RDSTabTypeMy, // 设置
- };
- @interface RDSTabbarController ()
- @property (nonatomic, strong) NSDictionary *configs;
- @property (nonatomic, strong) RDSHomeVC *homeVC;
- @property (nonatomic, strong) RDSRoomVC *roomVC;
- @property (nonatomic, strong) RDSFindVC *findVC;
- @property (nonatomic, strong) RDSMyVC *myVC;
- @property (nonatomic, strong) RDSAddView *addView;
- @property (nonatomic, assign) int curIndex;// 记录当前tabbar item 下标,用于push添加房间页面
- @end
- @implementation RDSTabbarController
- - (void)viewDidLoad {
- [super viewDidLoad];
- // Do any additional setup after loading the view.
-
-
- // 取出tabbar顶部分割线
- if (@available(iOS 13.0, *)) {
-
- UITabBarAppearance *appearance = [UITabBarAppearance new];
- [appearance configureWithOpaqueBackground];
-
- UIColor *color = [UIColor whiteColor];
- appearance.shadowImage = [UIImage rds_imageWithColor:color];
- appearance.backgroundColor = color;
-
- self.tabBar.standardAppearance = appearance;
- /// 这里有点区别。导航栏是iOS13开始。这里是iOS15才有的
- if (@available(iOS 15.0, *)) {
- self.tabBar.scrollEdgeAppearance = self.tabBar.standardAppearance;
- }
- }
-
- [self setUpSubNav];
- // 中间+加号按钮
- // [self addMidButton];
- }
- - (NSArray*)tabbars{
-
- NSMutableArray *items = [[NSMutableArray alloc] init];
- for (NSInteger tabbar = 0; tabbar < TabBarCount; tabbar++) {
- [items addObject:@(tabbar)];
- }
- return items;
- }
- - (void)setUpSubNav {
-
- NSMutableArray *vcArray = [[NSMutableArray alloc] init];
- [self.tabbars enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
- NSNumber *tabbar = obj;
- NSDictionary * item =[self vcInfoForTabType:[tabbar integerValue]];
- NSString *vcName = item[TabBarVC];
- NSString *title = item[TabBarTitle];
- NSString *imageName = item[TabBarImage];
- NSString *imageSelected = item[TabBarSelectedImage];
- Class clazz = NSClassFromString(vcName);
- UIViewController *vc = [[clazz alloc] init];
- if ([vc isKindOfClass:[RDSHomeVC class]]) {
- self.homeVC = (RDSHomeVC *)vc;
- }
- else if ([vc isKindOfClass:[RDSRoomVC class]]){
- self.roomVC = (RDSRoomVC *)vc;
- }
- else if ([vc isKindOfClass:[RDSFindVC class]]){
- self.findVC = (RDSFindVC *)vc;
- }
- else if ([vc isKindOfClass:[RDSMyVC class]]){
- self.myVC = (RDSMyVC *)vc;
- }
-
- vc.hidesBottomBarWhenPushed = NO;
- RDSNavController *nav = [[RDSNavController alloc] initWithRootViewController:vc];
- nav.tabBarItem = [[UITabBarItem alloc] initWithTitle:title
- image:[[UIImage imageNamed:imageName] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]
- selectedImage:[[UIImage imageNamed:imageSelected] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
-
- // 设置TabBar上 字体颜色
- self.tabBar.tintColor = RGB(51, 51, 51);
-
- nav.tabBarItem.tag = idx;
- NSInteger badge = [item[TabBarItemBadgeValue] integerValue];
- if (badge) {
- nav.tabBarItem.badgeValue = [NSString stringWithFormat:@"%zd",badge];
- }
-
- // 隐藏中间按钮 和发现页面
- // if(idx == 2){
- // nav.tabBarItem.enabled = NO;
- // }
- //
- [vcArray addObject:nav];
- }];
- self.viewControllers = [NSArray arrayWithArray:vcArray];
-
- }
- // 中间按钮
- -(void)addMidButton{
- dispatch_async(dispatch_get_main_queue(), ^{
- CGFloat height = 60;//self.tabBar.frame.size.height - [UIApplication sharedApplication].keyWindow.safeAreaInsets.bottom;
- UIButton * shot = [[UIButton alloc] initWithFrame:CGRectMake((self.tabBar.frame.size.width - height)*0.5, -5, height, height)];
- [shot addTarget:self action:@selector(showMidBtn:) forControlEvents:UIControlEventTouchUpInside];
- [shot setBackgroundImage:[UIImage imageNamed:@"icon_tab_add_sel"] forState:UIControlStateNormal];
- shot.layer.cornerRadius = height * 0.5;
- [self.tabBar addSubview:shot];
- });
- }
- - (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item{
- // if (item.tag != 2) {
- // [self hiddenAddView];
- // }
- _curIndex = (int)item.tag;
- }
- // 显示添加房间、场景按钮
- - (void)showMidBtn:(UIButton *)sender{
-
- if(self.addView.isHidden){
- self.addView.hidden = NO;
-
- // 渐变动画
- [UIView animateWithDuration:0.2 animations:^{
- self.addView.alpha = 1;
- }];
- }
- }
- - (void)hiddenAddView{
- if(!self.addView.isHidden){
- // 渐变动画
- [UIView animateWithDuration:0.2 animations:^{
- self.addView.alpha = 0;
- } completion:^(BOOL finished) {
- self.addView.hidden = YES;
- }];
- }
- }
- - (RDSAddView *)addView{
-
- if(_addView == nil){
- CGFloat heihgt = SCREEN_HEIGHT-self.tabBar.rds_height;
- _addView = [RDSAddView rds_loadViewFromNib];
- _addView.frame = CGRectMake(0, 0, SCREEN_WIDTH, heihgt);
- _addView.alpha = 0;
- _addView.hidden = YES;
- [[UIApplication sharedApplication].windows.firstObject addSubview:_addView];
-
- RDS_WEAKSELF(weakSelf)
- _addView.onHideBtnClick = ^{
- [weakSelf hiddenAddView];
- };
- _addView.onRoomBtnClick = ^{
- [weakSelf hiddenAddView];
-
- RDSResetDeviceVC *vc = [[RDSResetDeviceVC alloc] init];
- vc.hidesBottomBarWhenPushed = YES;
- [weakSelf.viewControllers[weakSelf.curIndex] pushViewController:vc animated:YES];
- };
-
- }
- return _addView;
- }
- #pragma mark - VC
- - (NSDictionary *)vcInfoForTabType:(RDSTabType)type{
-
- if (_configs == nil)
- {
- _configs = @{
- @(RDSTabTypeHome) : @{
- TabBarVC : @"RDSHomeVC",
- TabBarTitle : @"首页",
- TabBarImage : @"icon_tab_home",
- TabBarSelectedImage: @"icon_tab_home_sel",
- TabBarItemBadgeValue: @(0)
- },
- @(RDSTabTypeRoom): @{
- TabBarVC : @"RDSRoomVC",
- TabBarTitle : @"房间",
- TabBarImage : @"icon_tab_room",
- TabBarSelectedImage: @"icon_tab_room_sel",
- TabBarItemBadgeValue: @(0)
- },
- // @(RDSTabTypeAdd): @{
- // TabBarVC : @"UIViewController",
- // TabBarTitle : @"",
- // TabBarImage : @"icon_tab_clear",
- // TabBarSelectedImage: @"icon_tab_clear",
- // TabBarItemBadgeValue: @(0)
- // },
- @(RDSTabTypeFind): @{
- TabBarVC : @"RDSFindVC",
- TabBarTitle : @"发现",
- TabBarImage : @"icon_tab_found",
- TabBarSelectedImage: @"icon_tab_found_sel",
- TabBarItemBadgeValue: @(0)
- },
- @(RDSTabTypeMy) : @{
- TabBarVC : @"RDSMyVC",
- TabBarTitle : @"我的",
- TabBarImage : @"icon_tab_me",
- TabBarSelectedImage: @"icon_tab_me_sel",
- TabBarItemBadgeValue: @(0)
- }
- };
-
- }
- return _configs[@(type)];
- }
- @end
|