     
     internal var confiningTrackFrame: CGRect {
         return sliderTrackView.frame.insetBy(dx: horizontalPadding, dy: 0)
+    }
+    
+    internal var interactableBounds: CGRect {
+        let horizontalOffset = -(sliderHandleView.bounds.width / 2) + horizontalPadding
+        return bounds.insetBy(dx: horizontalOffset, dy: 0)
     }
     
     internal func commonInit() {

        
        updateControl(to: value)
        sendActions(for: .valueChanged)
        
        return true
    }
    
    public override func endTracking(_ touch: UITouch?, with event: UIEvent?) {
        sendActions(for: .editingDidEnd)
    }
    
    // MARK: - Private

    
    public override func beginTracking(_ touch: UITouch, with event: UIEvent?) -> Bool {
        let location = touch.location(in: self)
        return interactableBounds.contains(location)
    }
    
    public override func continueTracking(_ touch: UITouch, with event: UIEvent?) -> Bool {
