2017-10-16 244 views
0

我有一个已被窃听我过去一天一个问题,我只是不能找出解决方案......UISlider不处理.touchUpInside事件妥善

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

我尝试使用.touchDown方法来检测触摸的开始,它完美地工作。但是,当我尝试使用.touchUpInside.touchUpOutside来检测用户何时抬起他/她的手指时,该事件不会在适当的时间触发。

当我在滑块周围拖动我的手指时,距离它的起点一定距离时,事件触发。但是,当我只是简单地触摸它或将其移动一点点时,触发事件根本不会触发...

有人可以帮助我吗?下面是我使用的设置我的滑块代码:

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) 
} 
+0

所以你说的就是你见'handleTouchDown()'被调用,有时'handleTouchUp()'不会被调用或?确切地说, – Ladislav

+0

。更具体地说,当我将滑块从其起始位置移动一定距离时,handleTouchUp()只会被调用... –

+0

您可以尝试移除'setMinimumTrackImage','setMaximumTrackImage'和'setThumbImage'并再次测试以查看您的自定义拇指图像责怪? – Ladislav

回答

0

你应该尝试添加.touchCancel状态去handleTouchUp以及像这样:

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