Swift - 自定义tabbar的封装

425 阅读1分钟

前言:前面三篇博客说到的问题都出自这篇博客中tabbar的封装,而且Object-C版本的封装前面也发过,一样的东西,换了种语言来写。

所以呢,先看下效果:
这里写图片描述

代码简单贴下,大家看看,然后直接到下面找下载地址:


import UIKit

class LHHTabbar: UIView {

    /*
    // Only override drawRect: if you perform custom drawing.
    // An empty implementation adversely affects performance during animation.
    override func drawRect(rect: CGRect) {
        // Drawing code
    }
    */
    /*
     bgImageName和isUse只能有一个使用另一个必为nil,用来设置整个Tabbar背景色
     */
    func creatLHHTabbar(backGroundImage:String?,orUseBackGroundView:Bool,bgViewColor:UIColor ,viewControllerArray:NSArray,normalImageArray:NSArray,selectImageArray:NSArray,itemTitleArray:NSArray,currentTarget:AnyObject,selector:Selector) {
        //创建tabbar背景色,可用图片背景也可用纯色view设置背景
        self.creatLHHTabbarBG(backGroundImage, orUseBackGroundView: orUseBackGroundView, bgViewColor: bgViewColor)
        //创建选择器
        for var i = 0; i<viewControllerArray.count;i++ {
            self.creatLHHTabbarItem(viewControllerArray, normalImageArray: normalImageArray, selectImageArray: selectImageArray, itemTitleArray: itemTitleArray, currentIndex: i, currentTarget: currentTarget, selector: selector)
        }

    }
    func creatLHHTabbarBG(bgImageName:String?,orUseBackGroundView:Bool,bgViewColor:UIColor) {
        if (bgImageName != nil) {
            let imageView = UIImageView(image: UIImage(named: bgImageName!))
            imageView.frame = self.bounds
            self.addSubview(imageView)
        }
        else
        {
            let label = UILabel(frame: self.bounds)
            label.backgroundColor = bgViewColor
            self.addSubview(label)

        }
    }
    func creatLHHTabbarItem(controllerArray:NSArray,normalImageArray:NSArray,selectImageArray:NSArray,itemTitleArray:NSArray,currentIndex:Int,currentTarget:AnyObject,selector:Selector) {

        let bgView = UIView(frame: CGRectMake((self.bounds.size.width / CGFloat(Float(controllerArray.count))) * CGFloat(Float(currentIndex)), 0, self.bounds.size.width / CGFloat(Float(controllerArray.count)), self.bounds.size.height))
        if currentIndex == 0 {

        }
        else
        {
            bgView.backgroundColor = UIColor.clearColor();
        }
        self.addSubview(bgView)

        let imageView = UIImageView(frame: CGRectMake(0, 0, 20, 20))
        imageView.center = CGPointMake(self.bounds.size.width/CGFloat(Float(controllerArray.count))/2, self.bounds.size.height/2-10)
        imageView.tag = currentIndex;
        imageView.userInteractionEnabled = true;
        if currentIndex == 0 {
            imageView.image = UIImage(named: "\(selectImageArray[currentIndex])")
        }
        else
        {
            imageView.image = UIImage(named: "\(normalImageArray[currentIndex])")
        }
        bgView.addSubview(imageView)

        let label = UILabel(frame: CGRectMake(0, imageView.center.y+20/2, self.bounds.size.width/CGFloat(controllerArray.count), self.bounds.size.height-(imageView.center.y+20/2)))

        label.text = "\(itemTitleArray[currentIndex])"
        if currentIndex == 0 {
            label.textColor = UIColor.init(colorLiteralRed: 0.00, green: 0.76, blue: 0.83, alpha: 1.00)
        }
        else
        {
            label.textColor = UIColor.whiteColor()
        }
        label.textAlignment = NSTextAlignment.Center;
        label.font = UIFont.systemFontOfSize(10)
        bgView.addSubview(label)

        let button = UIButton(type: .System)
        button.frame = CGRectMake(0, 0, bgView.frame.size.width, bgView.frame.size.height)
        button.tag = currentIndex;
        button.addTarget(currentTarget, action: selector, forControlEvents: .TouchUpInside)
        bgView.addSubview(button)
    }

}

以上是封装的部分,下载地址:github.com/codeliu6572…