UISlider 无法正确处理 .touchUpInside 事件

UISlider doesn't handle .touchUpInside event properly

我有一个问题在过去一天一直困扰着我,我就是想不出解决办法...

我有一个 UISlider,其范围从值 1 到 3(这就是我们需要的方式)。滑块是连续的,因为它实际上根据其当前值更新一些属性。现在我想实现一个功能,滑块根据用户开始触摸它或结束触摸来触发动作。

我尝试使用 .touchDown 方法来检测触摸的开始,效果很好。但是,当我尝试使用 .touchUpInside.touchUpOutside 来检测用户何时抬起他/她的手指时,事件不会在适当的时间触发。

当我将手指围绕滑块拖动到距离其起点一定距离时,事件触发。但是当我只是短暂地触摸它或稍微移动它时,touchup 事件根本不会触发...

有人可以帮我吗?这是我用来设置滑块的代码:

let slider: UISlider = {
    let slider = UISlider()
    slider.isContinuous = true
    slider.minimumValue = 1
    slider.maximumValue = 3
    slider.setMinimumTrackImage(#imageLiteral(resourceName: "minimumSliderTrackImage").resizableImage(withCapInsets: UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20)), for: .normal)
    slider.setMaximumTrackImage(#imageLiteral(resourceName: "maximumSliderTrackImage").resizableImage(withCapInsets: UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20)), for: .normal)

    let sliderThumb = #imageLiteral(resourceName: "sliderThumbImage")
    slider.setThumbImage(sliderThumb, for: .normal)

    slider.addTarget(self, action: #selector(adjustPriceLabel), for: .valueChanged)
    slider.addTarget(self, action: #selector(handleTouchDown), for: .touchDown)
    slider.addTarget(self, action: #selector(handleTouchUp), for: [.touchUpInside, .touchUpOutside])

    slider.setValue(2.0, animated: true)

    return slider
}()

@objc fileprivate func handleTouchDown() {
    print(1234)
}

@objc fileprivate func handleTouchUp() {
    print(5678)
}

您应该尝试添加 .touchCancel 状态以转到 handleTouchUp,就像这样:

slider.addTarget(self, action: #selector(handleTouchUp), for: [.touchUpInside, .touchUpOutside, .touchCancel])