Swift-自定制带有特殊按钮TabBar

---恢复内容开始---

封装了一个带有中间凸起的自定制Tabbar,包含4个普通按钮和中间的一个凸起按钮-
  1. 首先封装了一个UIButton,重新设置了UIButton的图片位置和label位置
  2. 使用便利构造器创建了一个带有imageview的构造方法,用来构造中间特殊的按钮
  3. 继承与UIView创建了一个自定制tabbar类,大小为屏幕宽度和49 高,
  4. 动态创建5个自定制的UIButton,对中间的按钮做了特殊处理,其中的位置大小可以根据需求设置。
  5. 设置一个全局的button存储高亮状态下的按钮
  6. 使用闭包进行了控制器于自定制tabbar之间的传值,实现了不同按钮切换不同界面的功能
使用方法:
  1. 实例化一个自定制TabBar let myTabbar = ZYF_Main_MyTabBar()
  2. 设置自定制TabBar的frame myTabbar.frame = CGRectMake(0, height - 49, width, 49)
  3. 调用方法,传入参数:标题数组、.Normal状态下的图片数组、.selected状态下的图片数组,每个按钮之间的间距
    tabbar.creatTabBar(title, imageNames: imageName, selectedImageNames: selectedImage, space: 83)

Github地址

上代码

封装UIButton,重置UIButton的图片位置和Label位置

class ZYF_MyTabBarButton: UIButton {
    //重写构造方法
    override init(frame: CGRect) {
        super.init(frame: frame)
        self.frame = CGRectMake(0, 0, 49, 49)
        self.setTitleColor(UIColor.grayColor(), forState: .Normal)
        self.setTitleColor(UIColor.redColor(), forState: .Selected)
        self.titleLabel?.font = UIFont.systemFontOfSize(11)
        self.titleLabel?.textAlignment = .Center
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    //重写button中图片的位置
    override func imageRectForContentRect(contentRect: CGRect) -> CGRect {
        return CGRectMake((contentRect.size.width - 30) / 2, 2, 30, 30)
    }
    //重写button中文本框的位置
    override func titleRectForContentRect(contentRect: CGRect) -> CGRect {
        return CGRectMake(0, contentRect.size.height - 17, contentRect.size.width, 15)
    }
    
    //使用便利构造器构造中间特殊按钮
    convenience init(frame: CGRect,image:String) {
        self.init(frame:frame)
        let imageView = UIImageView(frame: CGRectMake(0,0,70,70))
        imageView.image = UIImage(named: image)
        self.addSubview(imageView)
    }
}

继承UIView制作MyTabBar

class ZYF_Main_MyTabBar: UIView {
    //设置一个全局的button存储selected按钮
    var button = UIButton()
    //获得屏高
    let height = UIScreen.mainScreen().bounds.size.height
    //获得屏宽
    let width = UIScreen.mainScreen().bounds.size.width

    //闭包传值,创建一个闭包,用来传递被选中的按钮,以实现页面的转换
    var clickBlock:((selcted:Int) ->())?
    
    //重写构造方法
    override init(frame: CGRect) {
        super.init(frame: frame)
        self.frame = CGRectMake(0, 0, width, 49)
        self.backgroundColor = UIColor.blackColor()
        //打开用户交互
        self.userInteractionEnabled = true
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    //写一个制作方法,传图标题数组、图片名称数组、被选中状态下图片名称数组和每个按钮之间的间距
    func creatTabBar(titNames:[String],imageNames:[String],selectedImageNames:[String],space:Int) {
        //快速布局
        for i in 0...titNames.count - 1 {
            var btn = ZYF_MyTabBarButton(type: .Custom)
            btn.frame = CGRectMake(20 + CGFloat(i) * 83, 0, 49, 49)
            let image = UIImage(named: imageNames[i])
            let selectedImage = UIImage(named: selectedImageNames[i])
            
            //Mark*设置中间特殊按钮
            if i == 2{
            
                    
                //Mark* 如果想设置凸起的话让pointY为负值
                
                let pointY:CGFloat = 5
                let pointX:CGFloat = 49 + abs(pointY)
                btn = ZYF_MyTabBarButton.init(frame: frame, image: "ZYF-Login-Dou")
                btn.frame = CGRectMake(183, pointY, width / 5, pointX)
            } else {
                btn.setImage(selectedI
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值