IOS 自定义tabbar,并给tabbar按钮加载网络图片
2017-11-02 14:13
1361 查看
// // MainTabbarController.h // WXMovie // // Created by mac on 15/3/2. // Copyright (c) 2015年 mac. All rights reserved. // #import <UIKit/UIKit.h> @interface MainTabbarController : UITabBarController @end
// // MainTabbarController.m // WXMovie // // Created by mac on 15/3/2. // Copyright (c) 2015年 mac. All rights reserved. // #import "MainTabbarController.h" #import "SquareViewController.h" #import "MallViewController.h" #import "CommunityViewController.h" #import "PeripheryViewController.h" #import "MyViewController.h" #import "XWButton.h" @interface MainTabbarController () @property (nonatomic, strong) NSArray *navigateArr; // @property (nonatomic, strong) NSMutableArray *titleArr; // @property (nonatomic, strong) NSMutableArray *imageArr; // @property (nonatomic, strong) NSMutableArray *CtrlArr; // @end @implementation MainTabbarController{ UIImageView *selectImage; //选中视图 NSInteger selectTag; } - (void)dealloc{ [[NSNotificationCenter defaultCenter] removeObserver:self name:@"tabbarImageArr" object:nil]; } - (void)noti:(NSNotification *)not{ NSLog(@"%@",not.object); if (not.object) { _navigateArr = not.object; //1.加载子控制器 [self _loadSubViewCtrl]; //2.移除系统tabbar按钮 [self _removeSystemBarbtn]; //3.添加自定义按钮 [self _creatTabbarBtn]; } } - (void)viewDidLoad { [super viewDidLoad]; _titleArr = [[NSMutableArray alloc]init]; _imageArr = [[NSMutableArray alloc]init]; _CtrlArr = [[NSMutableArray alloc]init]; //点登录后发送的通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(noti:) name:@"tabbarImageArr" object:nil]; } - (void)viewDidAppear:(BOOL)animated{ NSLog(@"%@",self.tabBar.subviews); [super viewDidAppear:animated]; [self _removeSystemBarbtn]; } //移除系统tabbar上面的按钮(UITabBarButton类型) - (void)_removeSystemBarbtn{ Class class = NSClassFromString(@"UITabBarButton"); for (UIView *view in self.tabBar.subviews) { //如果view是由UITabBarButton类创建的对象,则将其移除 if ([view isKindOfClass:class]) { [view removeFromSuperview]; } } } //给tabbar添加自定义按钮 - (void)_creatTabbarBtn{ [_titleArr removeAllObjects]; [_imageArr removeAllObjects]; // NSLog(@"%d",self.tabBar.translucent); //1 //在tabbar上覆盖一层imageView UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, screenWidth, 49)]; [self.tabBar addSubview:imageView]; NSArray *titles = @[@"广场",@"商城",@"小区",@"周边",@"我"]; // for (int i=0; i<_navigateArr.count; i++) { if (![[_navigateArr[i] objectForKey:@"commentCode"] isKindOfClass:[NSNull class]]) { [_titleArr addObject:[titles objectAtIndex:[[_navigateArr[i] objectForKey:@"commentCode"] integerValue]]]; // [_CtrlArr addObject:[titles objectAtIndex:[[_navigateArr[i] objectForKey:@"commentCode"] integerValue]]]; } if (![[_navigateArr[i] objectForKey:@"kindIcon"] isKindOfClass:[NSNull class]]) { [_imageArr addObject:[_navigateArr[i] objectForKey:@"kindIcon"]]; }else{ [_imageArr addObject:@""]; } } for (NSInteger i = 0 ; i < _titleArr.count; i++) { //按钮标题 NSString *title = _titleArr[i]; //按钮图片 NSString *imgName = _imageArr[i]; //子类化UIControl 创建自定义按钮 XWButton *btn = [XWButton buttonWithType:UIButtonTypeCustom]; btn.frame = CGRectMake(screenWidth/_titleArr.count * i, 0, screenWidth / _titleArr.count, 49); [btn setTitle:title forState:UIControlStateNormal]; [btn setTitleColor:[UIColor lightGrayColor] forState:UIControlStateNormal]; [btn setTitleColor:[UIColor redColor] forState:UIControlStateSelected]; // [btn setImage:[UIImage imageNamed:imgName] forState:UIControlStateNormal]; [btn sd_setImageWithURL:[NSURL URLWithString:imgName] forState:UIControlStateNormal completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { UIImage *cImageV = [self imageCompressForSize:image targetSize:CGSizeMake(25, 25)]; [btn setImage:cImageV forState:UIControlStateNormal]; }]; btn.titleLabel.font = [UIFont systemFontOfSize:14]; // [btn setImage:[UIImage imageNamed:@"selectTabbar_bg_all1"] forState:UIControlStateSelected]; //给自定义按钮添加点击事件,切换子控制器 [btn addTarget:self action:@selector(btnAction:) forControlEvents:UIControlEventTouchUpInside]; btn.tag = i + 100; [self.tabBar addSubview:btn]; //当页面第一次显示时,使选中视图在第一个按钮的位置 if (i == 0) { btn.selected = YES; selectTag = 100; } } } //按钮点击方法 - (void)btnAction:(UIButton *)btn{ //切换子控制器 self.selectedIndex = btn.tag - 100; if (btn.tag!=selectTag) { btn.selected = YES; UIButton *selectBtn = [self.tabBar viewWithTag:selectTag]; selectBtn.selected = NO; } if (btn.tag==selectTag) { btn.selected = YES; } selectTag = btn.tag; } #pragma -mark 加载子控制器 - (void)_loadSubViewCtrl{ [_CtrlArr removeAllObjects]; // navigationBar导航栏信息list // //////// // kindName String 类别名称 // kindIcon String 类别图标Url // commentCode String 备注码(0:广场、1:商城、2:小区、3:周边、4:我) //创建子控制器(第三级控制器) SquareViewController *SquareVC = [[SquareViewController alloc] init]; MallViewController *MallVC = [[MallViewController alloc] init]; CommunityViewController *CommunityVC = [[CommunityViewController alloc] init]; PeripheryViewController *PeripheryVC = [[PeripheryViewController alloc] init]; MyViewController *MyVC=[[MyViewController alloc]init]; NSArray *viewCtrls = @[SquareVC,MallVC,CommunityVC,PeripheryVC,MyVC]; NSMutableArray *navs = [NSMutableArray array]; // for (int i=0; i<_navigateArr.count; i++) { if (![[_navigateArr[i] objectForKey:@"commentCode"] isKindOfClass:[NSNull class]]) { [_CtrlArr addObject:[viewCtrls objectAtIndex:[[_navigateArr[i] objectForKey:@"commentCode"] integerValue]]]; } } for (NSInteger i = 0; i < _CtrlArr.count; i++) { UIViewController *viewCtrl = [_CtrlArr objectAtIndex:i]; //创建第二级控制器 UINavigationController *childVcNav = [[UINavigationController alloc]initWithRootViewController:viewCtrl]; //设置导航栏图片会影响透明度 //将导航栏改为半透明 childVcNav.navigationBar.translucent = YES; [navs addObject:childVcNav]; } //将导航控制器交给tabbarController self.viewControllers = navs; } //图片压缩色值不变 - (UIImage *)imageCompressForSize:(UIImage *)sourceImage targetSize:(CGSize)size{ UIImage *newImage = nil; CGSize imageSize = sourceImage.size; CGFloat width = imageSize.width; CGFloat height = imageSize.height; CGFloat targetWidth = size.width; CGFloat targetHeight = size.height; CGFloat scaleFactor = 0.0; CGFloat scaledWidth = targetWidth; CGFloat scaledHeight = targetHeight; CGPoint thumbnailPoint = CGPointMake(0.0, 0.0); if(CGSizeEqualToSize(imageSize, size) == NO){ CGFloat widthFactor = targetWidth / width; CGFloat heightFactor = targetHeight / height; if(widthFactor > heightFactor){ scaleFactor = widthFactor; } else{ scaleFactor = heightFactor; } scaledWidth = width * scaleFactor; scaledHeight = height * scaleFactor; if(widthFactor > heightFactor){ thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5; }else if(widthFactor < heightFactor){ thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5; } } UIGraphicsBeginImageContextWithOptions(size, NO, 3.0); CGRect thumbnailRect = CGRectZero; thumbnailRect.origin = thumbnailPoint; thumbnailRect.size.width = scaledWidth; thumbnailRect.size.height = scaledHeight; [sourceImage drawInRect:thumbnailRect]; newImage = UIGraphicsGetImageFromCurrentImageContext(); if(newImage == nil){ NSLog(@"scale image fail"); } UIGraphicsEndImageContext(); return newImage; } @end
相关文章推荐
- IOS 自定义tabbar,并给tabbar按钮加载网络图片
- 自定义tabbar,给tabbar按钮加载网络图片
- iOS通过按钮图片创建自定义TabBar
- Android--自定义View加载网络图片,实现缩放,圆形剪裁
- iOS开发项目之四 [ 调整自定义tabbar的位置与加号按钮的位置]
- ios通过按钮点击异步加载图片
- [iOSTabBarController自定义] 关联控制器和按钮的方法就是 selectedIndex = tag
- iOS-UIImageView加载网络下载的图片(异步+多线程)
- IOS 开发之自定义按钮实现文字图片位置随意定制
- IOS开发之异步加载网络图片并缓存本地实现瀑布流(一)
- iOS 开发之 为UIButton添加类别方法加载网络图片
- iOS_第3方类库_EGOImageView异步加载网络图片
- 【Android自定义View实战】之自定义圆形头像CircleImageView支持加载网络图片
- IOS开发中加载大量网络图片优化方法
- iOS 背景图片。按钮高亮自定义背景
- iOS开发学习笔记之swift3.0几种加载网络图片的方法
- IOS开发之异步加载网络图片并缓存本地实现瀑布流(二)
- IOS开发之异步加载网络图片并缓存本地实现瀑布流(二)
- iOS网络编程(三) 异步加载及缓存图片---->SDWebImage
- ViewFlipper网络图片加载及关联导航按钮