您的位置:首页 > 理论基础 > 计算机网络

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  UITabbar