//
// 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