     @IBInspectable public var maxRate: Int = 5
     @IBInspectable public var focusStyle: FocusStyle = .default
 
+    private var isHalfStep: Bool {
+        return halfImage == nil
+    }
     private var stackview: RateStackView?
     private var invisibleStackview: InvisibleFocusStackView?
     private var config: Config?

class InvisibleFocusStackView: UIStackView {
    private var maxRateDoubled: Int = 0
    var focusedIndex: Int = 0
    var focusedIndexDidChange: ((Int)->())?
    private var imageSize: CGSize = .zero
    static func create
        (maxRateDoubled: Int, imageSize: CGSize, focusedIndexDidChange: ((Int)->())?)
        -> InvisibleFocusStackView
    {
        let views: [InvisibleFocusView] = (0...maxRateDoubled).map{_ in
            let v = InvisibleFocusView()
            v.size = imageSize
            return v
        }
        let v =  InvisibleFocusStackView(arrangedSubviews: views)
        v.maxRateDoubled = maxRateDoubled
        v.axis = .horizontal
        v.spacing = 0
        v.focusedIndexDidChange = focusedIndexDidChange

        }
    }
    private func updateInvisible() {
        if invisibleStackview == nil {
            let v: InvisibleFocusStackView = InvisibleFocusStackView
                .create(config: config!) {
                    [weak self] value in
                    self?.stackview?.value = value
                }
            addSubview(v)
            self.invisibleStackview = v
