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
}()
}