iOS/swift之二级菜单导航

1.**********

/**
 二级导航,
 使用:
 let muselectcell = LYBSecondNavview.init(frame: CGRect.init(x: 0, y: 0, width: WIDTH, height: HEIGHT))
 muselectcell.titArr = ["一","二","三","四","五"]//二级导航标题
 muselectcell.vcnameArr=["LYBsecondnavVCone","LYBsecondnavvctwo"]// 对应控制器名
 view.addSubview(muselectcell)
 */
import UIKit

class LYBSecondNavview: UIView,UIScrollViewDelegate {
    var index:Int=0//底部scrollview的索引
    //选择按钮后做对应的操作
    var selectnavbtnblock:(Int)->()={
        (Int)->()in
    }
    //二级导航title数组
    var  titArr:[String]=[""]{
        didSet{
             addSubview(navscrollview)
        }
    }
    
    //控制器名数组
    var vcnameArr:[String]=[]{
        didSet{
          addviewToContentScroll()
        }
    }
    //吧控制器的view加入到contentscroll
    func addviewToContentScroll(){
        for i in 0..<vcnameArr.count{
        let clsName = Bundle.main.infoDictionary!["CFBundleExecutable"] as? String//这是获取项目的名称,
        let className=clsName! + "." + vcnameArr[i]
        let viewC = NSClassFromString(className)!as! UIViewController.Type //这里需要指定类的类型XX.Type
        let vc=viewC.init()
            vc.view.frame=CGRect.init(x: i*Int(WIDTH), y: 0, width: Int(WIDTH), height: Int(HEIGHT)-50-Int(bottomSafeHeight)-Int(TopSpaceHigh))
            contentScroll.addSubview(vc.view)
        }
        contentScroll.contentSize=CGSize.init(width: vcnameArr.count*Int(WIDTH)+1, height: 0)
        contentScroll.isPagingEnabled=true
    }
    override init(frame: CGRect) {
        super.init(frame: frame)
        initViews()
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    func initViews(){
       
        addSubview(contentScroll)
        contentScroll.delegate=self
    }
    
    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
        index =  Int(scrollView.contentOffset.x/WIDTH)
         let w:Int=Int(WIDTH)/titArr.count
        indicateview.x=CGFloat(index*w)//改变二级导航底部view的位置
        
    }
    
    //选择按钮后吧contentviewscroll做相应的偏移
    @objc func selectbtnClick(sender:UIButton){
        let btntag:Int=sender.tag-120
         let w:Int=Int(WIDTH)/titArr.count
        indicateview.x=CGFloat(btntag*w)//改变底部view的位置
        if(vcnameArr.count>btntag){//有可能控制器的数量和标题数量不一样多,
            contentScroll.setContentOffset(CGPoint.init(x: btntag*Int(WIDTH), y: 0), animated: true)
        }
        switch btntag {
        case 0:
            print("一")
            break
        case 1:
            print("二")
            break
        case 2:
            print("三")
            break
        case 3:
            print("四")
            break
        case 4:
            print("五")
            break
        default:
            break
        }
    }
    
    lazy var navscrollview:UIScrollView={
        let navscroll:UIScrollView=UIScrollView.init(frame: CGRect.init(x: 0, y: 0, width: WIDTH, height: 50))
        let w:Int=Int(WIDTH)/titArr.count
        for i in 0..<titArr.count{
            let btn:UIButton=UIButton.init(frame: CGRect.init(x: i*w, y: 0, width: w, height: 48))
            btn.setTitle(titArr[i], for: UIControl.State.normal)
            btn.setTitleColor(UIColor.blue, for: UIControl.State.normal)
            navscroll.addSubview(btn)
            btn.tag=120+i
            btn.addTarget(self, action: #selector(selectbtnClick), for: UIControl.Event.touchUpInside)
            if i==0{
                navscroll.addSubview(indicateview)
            }
        }
        return navscroll
    }()
    //底部滑动的view指示器
    lazy var indicateview:UIView={
        let indiview:UIView=UIView.init(frame: CGRect.init(x: 0, y:48, width: Int(WIDTH)/titArr.count, height: 1))
        indiview.backgroundColor=UIColor.blue
        return indiview
    }()
    

    
    //底部显示vc内容的scrollview
    lazy  var contentScroll:UIScrollView={
        let contentscroll:UIScrollView=UIScrollView.init(frame: CGRect.init(x: 0, y: 50, width: Int(WIDTH), height: Int(HEIGHT)-50-Int(bottomSafeHeight)-Int(TopSpaceHigh)))
        return contentscroll
    }()
}

猜你喜欢

转载自blog.csdn.net/u011146511/article/details/86570193
今日推荐