// // 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 } } }