StepProgressView.swift 1.97 KB
//
//  StepProgressView.swift
//  Twear
//
//  Created by yangbin on 2021/11/19.


import UIKit

//@IBDesignable
class StepProgressView: UIView {

    @IBOutlet private weak var backView: UIView!
    @IBOutlet private weak var thumbImageView: UIImageView!
    @IBOutlet private weak var trackView: UIView!
    @IBOutlet private weak var thumbLeftConstraint: NSLayoutConstraint!
    @IBOutlet private weak var trackWidthConstraint: NSLayoutConstraint!
    
    
    @IBInspectable
    private var cornerRadius: CGFloat = 0 {
        didSet {
            layer.cornerRadius = cornerRadius
            thumbImageView.layer.cornerRadius = cornerRadius
            layer.masksToBounds = cornerRadius > 0
        }
    }
    @IBInspectable
    private var thumbIsHidden: Bool = false
    
    var value: Int = 0 {
        didSet {
            refreshUI()
        }
    }
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        initFromNib()
//        setupUI()
    }
    
    
    required init?(coder: NSCoder) {
        super.init(coder: coder)
        initFromNib()
//        setupUI()
    }
    override class func awakeFromNib() {
        super.awakeFromNib()
       
    }
    
    private func initFromNib() {
        if let view = UINib(nibName: "StepProgressView", bundle: Bundle(for: type(of: self))).instantiate(withOwner: self, options: nil).first as? UIView {
            view.frame = bounds
            self.addSubview(view)
        }
    }
    
    override func layoutSubviews() {
        let width = self.thumbImageView.frame.size.width/2
        thumbLeftConstraint.constant = -width
        refreshUI()
    }
    
    private func refreshUI() {
        thumbImageView.isHidden = thumbIsHidden
        if thumbIsHidden {
            trackWidthConstraint.constant = self.frame.width * CGFloat(value)/100
        } else {
            trackWidthConstraint.constant = cornerRadius + (self.frame.width - 2*cornerRadius) * CGFloat(value)/100
        }
        
    }
    
    
    
    
}