swift-可移動進度條

import UIKit
//140  height 4  圓角就是 2  #EEEEEE 大的背景  小的背景#6CA9FF
class YJProgressView: UIView {
    private let indicaterView = UIView()
    private var wholePageNum = 0
    private var indivaterIndex = 0
    //進度條暢讀
    var progressViewH: CGFloat {
        get {
            return self.frame.size.height
        }
    }
    
    var progressViewW: CGFloat {
        get {
            return self.frame.size.width
        }
    }

    
    //進度條寬度
    var indicaterW: CGFloat {
        get {
            return self.frame.size.width / CGFloat(wholePageNum)
        }
    }
    
    //進度條圓角
    var corner: CGFloat {
        get {
            return self.frame.size.height / 2.0
        }
        
        set {
            
        }
    }

    init(frame: CGRect, wholePageCount: Int) {
        super.init(frame: frame)
        backgroundColor = .white //#EEEEEE
        wholePageNum = wholePageCount //總頁數
        createContentViews()

    }
    
    //更新進度信息
    func updateIndicater(sliderToIndex: Int, wholePageCount: Int) {
        wholePageNum = wholePageCount //總頁數
        if sliderToIndex <= wholePageNum {
            indivaterIndex = sliderToIndex
            let sliderX = CGFloat(sliderToIndex) * indicaterW
            indicaterView.snp.updateConstraints { (make) in
                make.left.equalTo(sliderX)
                make.width.equalTo(indicaterW)
            }
        }
    }
    
    //更新進度條的x值
    func updateIndicater(sliderToIndex: Int) {
        if sliderToIndex <= wholePageNum {
            indivaterIndex = sliderToIndex
            let sliderX = CGFloat(sliderToIndex) * indicaterW
            indicaterView.snp.updateConstraints { (make) in
                make.left.equalTo(sliderX)
                make.width.equalTo(indicaterW)
            }
        }
    }
    
    private func createContentViews() {
        addSubview(indicaterView)
        indicaterView.backgroundColor = .green //#6CA9FF
        indicaterView.layer.cornerRadius = corner
        indicaterView.snp.makeConstraints { (make) in
            make.left.equalTo(0)
            make.top.bottom.equalToSuperview()
            make.width.equalTo(indicaterW)
        }
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        updateIndicater(sliderToIndex: indivaterIndex)
    }
}

使用方式:

func testIndicaterView() {
//        let xx = CGRect(x: 20, y: 100, width: 140, height: 4)
        let prg1 = YJProgressView.init(frame: CGRect.zero, wholePageCount: 11)
        prg1.backgroundColor = .black
        view.addSubview(prg1)
        prg1.snp.makeConstraints { (make) in
            make.width.equalTo(140)
            make.height.equalTo(4)
            make.center.equalToSuperview()
        }
        prg = prg1
    }

prg?.updateIndicater(sliderToIndex: curr)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章