     @IBInspectable open var distance: Float = 100
     /// Delay between show buttons
     @IBInspectable open var showDelay: Double = 0
-    
+    /// Start angle of the circle
+    @IBInspectable open var startAngle: Float = 0
+    /// End angle of the circle
+    @IBInspectable open var endAngle: Float = 360
+
     // Pop buttons radius, if nil use center button size
     open var subButtonsRadius: CGFloat?
     

            return
        }

        let step: Float = 360.0 / Float(buttonsCount)
        for index in 0 ..< buttonsCount {
            guard case let button as CircleMenuButton = buttons[index] else { continue }
            let angle: Float = Float(index) * step
            if isShow == true {
                delegate?.circleMenu?(self, willDisplay: button, atIndex: index)

                button.rotatedZ(angle: angle, animated: false, delay: Double(index) * showDelay)
                button.showAnimation(distance: distance, duration: duration, delay: Double(index) * showDelay)
            } else {

        addTarget(self, action: #selector(CircleMenu.onTap), for: newEvent)
    }

    /**
     Retrieves the incremental lengths between buttons. If the arc length is 360 degrees or more, the increments
     will evenly space out in a full circle. If the arc length is less than 360 degrees, the last button will be
     placed on the endAngle.
     */
    fileprivate func getArcStep() -> Float {
        var arcLength = endAngle - startAngle
        var stepCount = buttonsCount

        if arcLength < 360 {
            stepCount -= 1
        } else if arcLength > 360 {
            arcLength = 360
        }

        return arcLength / Float(stepCount)
    }

    // MARK: actions
    
    private var isBounceAnimating: Bool = false
