CNLiveSwitchView.swift 4.84 KB
//
//  CNLiveSwitchView.swift
//  metaCode
//
//  Created by zx on 2023/11/14.
//  商品列表 - 上架,下架Switch

import Foundation

typealias switchClickBlock = (_ index:Int)->Void

class CNLiveSwitchView: UIView {
    //开关点击回调
    var switchBlock:switchClickBlock?
    
    /// 未选中背景颜色 无默认
    var _unselectedBgColor:UIColor?
    var unselectedBgColor:UIColor?{
        get{
            _unselectedBgColor
        }
        set{
            _unselectedBgColor = newValue
            self.resetUI()
        }
    }
    /// 选中背景颜色 无默认
    var _selectedBgColor:UIColor?
    var selectedBgColor:UIColor?{
        get{
            _selectedBgColor
        }
        set{
            _selectedBgColor = newValue
            self.resetUI()
        }
    }
    /// 未选中颜色 无默认
    var _unselectedTitleColor:UIColor?
    var unselectedTitleColor:UIColor?{
        get{
            _unselectedTitleColor
        }
        set{
            _unselectedTitleColor = newValue
            self.resetUI()
        }
    }
    /// 选中颜色 无默认
    var _selectedTitleColor:UIColor?
    var selectedTitleColor:UIColor?{
        get{
            _selectedTitleColor
        }
        set{
            _selectedTitleColor = newValue
            self.resetUI()
        }
    }
    /// 标题 无默认
    var _titleFont:UIFont?
    var titleFont:UIFont?{
        get{
            _titleFont
        }
        set{
            _titleFont = newValue
            self.resetUI()
        }
    }
    /// 选中的索引 默认0
    var _selectIndex:Int = 0
    var selectIndex:Int{
        get{
            _selectIndex
        }
        set{
            _selectIndex = newValue
            self.resetUI()
        }
    }
    /// 标题数组 无默认
    var _titles:NSArray = []
    var titles:NSArray{
        get{
            _titles
        }
        set{
            _titles = newValue
            self.resetUI()
        }
    }
    /// 角度 无默认
    var _radius:CGFloat = 0.0
    var radius:CGFloat{
        get{
            _radius
        }
        set{
            _radius = newValue
            self.resetUI()
        }
    }
    lazy var bgView :CNLiveRoundedRectView = {
        let bgView = CNLiveRoundedRectView()
        return bgView
    }()

    override init(frame: CGRect) {
        super.init(frame: frame)
        self.backgroundColor = .clear
        self.setUI()
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        self.bgView.frame = CGRect(x: 0, y: 0, width: self.width, height: self.height)
        self.bgView.layer.cornerRadius = self.height/2
        self.bgView.clipsToBounds = true
        let titlesCount = CGFloat(self.titles.count)
        let width = self.width/titlesCount
        for i in 0..<self.titles.count {
            let titleBgView = self.bgView.viewWithTag((i+1)*100+1) as! CNLiveRoundedRectView
            let titleBtn = self.bgView.viewWithTag((i+1)*100+2) as! UIButton
            titleBgView.frame = CGRect(x: CGFloat(i)*width, y: 0, width: width, height: self.height)
            titleBtn.frame = CGRect(x: CGFloat(i)*width, y: 0, width: width, height: self.height)
        }
    }
    
    func setUI(){
        self.bgView = CNLiveRoundedRectView(frame: CGRectZero)
        self.bgView.backgroundColor = UIColor(hue:0.00, saturation:0.00, brightness:0.94, alpha:1.00)
        self.addSubview(self.bgView)
    }
    
    func resetUI(){
        self.bgView.subviews.forEach {$0.removeFromSuperview()}
        for i in 0..<self.titles.count {
            let titleBgView = CNLiveRoundedRectView.init()
            titleBgView.tag = (i+1)*100+1
            titleBgView.radius = self.radius
            self.bgView.addSubview(titleBgView)
            
            let titleBtn = UIButton(type: .custom)
            titleBtn.setTitle((self.titles[i] as! String), for: .normal)
            titleBtn.titleLabel?.font = self.titleFont
            titleBtn.addTarget(self, action: #selector(titleBtnClick), for: .touchUpInside)
            titleBtn.tag = (i+1)*100+2
            self.bgView.addSubview(titleBtn)
            
            if self.selectIndex == i{
                titleBgView.fillColor = self.selectedBgColor
                titleBtn.setTitleColor(self.selectedTitleColor, for: .normal)
            }else{
                titleBgView.fillColor =  self.unselectedBgColor
                titleBtn.setTitleColor(self.unselectedTitleColor, for: .normal)
            }
        }
        self.layoutSubviews()
    }
    
    @objc func titleBtnClick(sender:UIButton){
        let selectIndex = (sender.tag-2)/100-1
        if self.selectIndex == selectIndex {
            return
        }
        if ((self.switchBlock) != nil) {
            self.switchBlock!(selectIndex)
        }
    }
}