自定义tabbar的基本封装

简介: 自定义tabbar的基本封装

博主因为一直使用同一个框架,而今日跟一个设计师连天,说到切图,关于切图的规范讨论了好久,从设计师的角度他们切的图都是图标边缘开始切,是不会带空白部分的(前提是自己画的图标,从别的地方copy进ps的设计师的图标就算了),聊到这个,博主不禁说有些地方需要他们专门给我留白,甚至切一大块,然后就说到了tabbar,假如我的tabbar有三个item,那么我让设计师切图就是320/3的长,其实是自己偷懒了,包括输入框左视图,我做的时候因为偷懒会需要设计师专门给我把图标拉出来切出一块带空白边框的icon图标,于是博主觉得不能这么懒下去,根据设计师给的图,没有做不出来的工程师,只有偷懒的工程师,所以今天博主就封装了这个tabbar的工程,封装代码如下:

#import <UIKit/UIKit.h>
@interface LHHTabbar : UIView
/*
 bgImageName和isUse只能有一个使用另一个必为nil,用来设置整个Tabbar背景色
 */
-(void)creatLHHTabbarWithBackGroundImage:(NSString *)bgImageName orUseBackGroundView:(BOOL)isUse ifUseBGViewWithColor:(UIColor *)bgViewColor withViewControllerArray:(NSArray *)controllerArray withNormalImageArray:(NSArray *)normalImageArray withSelectImageArray:(NSArray *)selectImageArray withTabbarItemTitleArray:(NSArray *)itemTitleArray withTarget:(id)currentTarget withSelector:(SEL)selector;
@end
#import "LHHTabbar.h"
@implementation LHHTabbar
-(void)creatLHHTabbarWithBackGroundImage:(NSString *)bgImageName orUseBackGroundView:(BOOL)isUse ifUseBGViewWithColor:(UIColor *)bgViewColor withViewControllerArray:(NSArray *)controllerArray withNormalImageArray:(NSArray *)normalImageArray withSelectImageArray:(NSArray *)selectImageArray withTabbarItemTitleArray:(NSArray *)itemTitleArray withTarget:(id)currentTarget withSelector:(SEL)selector
{
    //创建tabbar背景色,可用图片背景也可用纯色view设置背景
    [self creatLHHTabbarWithBackGroundImage:bgImageName orUseBackGroundView:isUse ifUseBGViewWithColor:bgViewColor];
    //创建选择器
    for (int i=0; i<controllerArray.count; i++) {
        [self creatLHHTabbarItemwithViewControllerArray:(NSArray *)controllerArray withNormalImageArray:normalImageArray withSelectImageArray:selectImageArray withTabbarItemTitleArray:(NSArray *)itemTitleArray withIndex:(NSUInteger)i withTarget:currentTarget withSelector:selector];
    }
}
-(void)creatLHHTabbarWithBackGroundImage:(NSString *)bgImageName orUseBackGroundView:(BOOL)isUse ifUseBGViewWithColor:(UIColor *)bgViewColor
{
    if (bgImageName!=nil) {
        UIImageView *imageView=[[UIImageView alloc]initWithFrame:self.bounds];
        imageView.image=[UIImage imageNamed:bgImageName];
        [self addSubview:imageView];
    }
    else
    {
        UILabel *view=[[UILabel alloc]initWithFrame:self.bounds];
        view.backgroundColor=bgViewColor;
        [self addSubview:view];
    }
}
-(void)creatLHHTabbarItemwithViewControllerArray:(NSArray *)controllerArray withNormalImageArray:(NSArray *)normalImageArray withSelectImageArray:(NSArray *)selectImageArray withTabbarItemTitleArray:(NSArray *)itemTitleArray withIndex:(NSUInteger)currentIndex withTarget:(id)currentTarget withSelector:(SEL)selector
{
    UIView *bgView=[[UIView alloc]initWithFrame:CGRectMake((self.bounds.size.width/controllerArray.count)*currentIndex, 0, self.bounds.size.width/controllerArray.count, self.bounds.size.height)];
    if (currentIndex==0) {
//        bgView.backgroundColor=[UIColor grayColor];
    }
    else
        bgView.backgroundColor=[UIColor clearColor];
    [self addSubview:bgView];
    UIImageView *imageView=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 20, 20)];
    imageView.center=CGPointMake(self.bounds.size.width/controllerArray.count/2, self.bounds.size.height/2-10);
    imageView.tag=currentIndex;
    imageView.userInteractionEnabled=YES;
    if (currentIndex==0) {
        imageView.image=[UIImage imageNamed:selectImageArray[currentIndex]];
    }
    else
        imageView.image=[UIImage imageNamed:normalImageArray[currentIndex]];
    [bgView addSubview:imageView];
    UILabel *label=[[UILabel alloc]initWithFrame:CGRectMake(0, imageView.center.y+20/2, self.bounds.size.width/controllerArray.count, self.bounds.size.height-(imageView.center.y+20/2))];
    label.text=itemTitleArray[currentIndex];
//    label.tag=currentIndex;
    if (currentIndex==0) {
        label.textColor=[UIColor colorWithRed:0.00f green:0.76f blue:0.83f alpha:1.00f];
    }
    else
        label.textColor=[UIColor whiteColor];
    label.textAlignment=NSTextAlignmentCenter;
    label.font=[UIFont systemFontOfSize:10];
    [bgView addSubview:label];
    UIButton *button=[UIButton buttonWithType:UIButtonTypeRoundedRect];
    button.frame=CGRectMake(0, 0, bgView.frame.size.width, bgView.frame.size.height);
    button.tag=currentIndex;
    [button addTarget:currentTarget action:selector forControlEvents:UIControlEventTouchUpInside];
    [bgView addSubview:button];
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
    // Drawing code
}
*/
@end

当然,封装的方法各式各样,博主这么写也只是觉得方便自己的习惯,像里面的一些字典其实也可以写成一个plist文件来用的,原理都一样,下面把下载地址放在github上了:https://github.com/codeliu6572/ProjectTabbar


还有navigation的封装,博主没有写,其实都很简单,大家用得到的自己封装下。

目录
相关文章
|
Java Linux C++
【Azure 应用服务】App Service For Linux 部署Java Spring Boot应用后,查看日志文件时的疑惑
【Azure 应用服务】App Service For Linux 部署Java Spring Boot应用后,查看日志文件时的疑惑
142 0
|
负载均衡 容灾 网络协议
全局流量管理全新升级
全球流量管理全面提升,聚焦于用户体验升级、负载策略增强及异构容灾,旨在为用户打造更加简单、灵活和稳定的流量调度服务。
|
供应链 算法 数据可视化
SPSS modeler用关联规则Apriori模型对笔记本电脑购买事务销量数据研究
SPSS modeler用关联规则Apriori模型对笔记本电脑购买事务销量数据研究
|
存储 JavaScript 前端开发
大幅提升前端工作效率!Numeral.js数值格式化库来了!
Numeral.js 是一个用来对数值进行操作和格式化的 JS 库。可将数字格式化为货币、百分比、时间,甚至是序数词的缩写(比如1st,100th)。 最好用的数值格式化工具
772 0
大幅提升前端工作效率!Numeral.js数值格式化库来了!
|
负载均衡 程序员 微服务
【微服务】2、一篇文章详解 Ribbon 负载均衡
【微服务】2、一篇文章详解 Ribbon 负载均衡
245 0
|
存储 安全 Java
Java Web 项目入门指南(http、Servlet、Request、Response、ServletContext、会话技术[cookie、session]、Filter、Listener)3
Java Web 项目入门指南(http、Servlet、Request、Response、ServletContext、会话技术[cookie、session]、Filter、Listener)3
201 0
|
架构师 安全 大数据
【企业架构师】成为首席企业架构师需要什么?
【企业架构师】成为首席企业架构师需要什么?
|
Web App开发 编解码 缓存
云话题 | 第3期 你女朋友在买买买时,程序员小哥在干嘛?
年货节来了,你女朋友下单了吗?观看直播已经成为人们日常上网的习惯之一,直播购物作为其中的重要项目,销售额屡创新高。最近,天猫年货节刚刚开幕,淘宝直播中就涌入了不少的用户前来抢购,毕竟足不出户就可以买到全国甚至全球的年货,对热衷买买买的消费者们来说实在太方便了。那么,直播抢购背后到底蕴藏着哪些技术?平台在开发网络直播系统时为什么如此看重CDN?在高并发直播的当下,CDN的技术人员都需要关注什么?阿里云Edge Plus的第3期云话题,边缘酱将为你讲讲关于直播抢购与CDN的那些事。
4681 0
云话题 | 第3期 你女朋友在买买买时,程序员小哥在干嘛?