IOS 自定义tabbar,并给tabbar按钮加载网络图片
2017-11-06 09:19
591 查看
// 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
- IOS加载网络图片的框架(共有4中方法)
- iOS自定义tabbar和仿安卓滑动效果可添加功能按钮
- IOS导航tabbar 自定义图片显示
- iOS网络加载图片缓存与SDWebImage
- IOS Swift TableViewCell 加载网络图片后图片高度
- iOS_第3方类库_EGOImageView异步加载网络图片
- iOS网络开发(6)网络图片加载开源框架SDWebImage
- Android 自定义圆形头像CircleImageView支持加载网络图片的实现代码
- IOS开发网络加载图片缓存策略之──ASIDownloadCache缓存策略
- IOS开发中加载大量网络图片优化方法
- 自定义加载网络图片工具: 三级缓存 解决图片显示错位的问题
- iOS开发, tabbar自定义图片
- iOS异步加载网络图片
- iOS-网络图片通过NSOperation线程依赖异步加载并保存到沙盒中
- 【iOS开发】SDWebImage框架,加载图片,失败之后,居然直接跳过不再去请求网络数据了?
- iOS开发swift版异步加载网络图片(带缓存和缺省图片)
- iOS UIImageView 网络加载图片自适应大小问题