自定义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的封装,博主没有写,其实都很简单,大家用得到的自己封装下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodingFire

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值