为 Swift 3.0 更新
这是我在解决添加双击识别器以重置滑块的几乎相同问题时偶然发现的一个老问题。
原始答案通过添加响应的动作为我们指明了正确的方向UIControlEvents.touchDownRepeat
。
这可以通过在视图控制器中添加该行来快速完成(例如在viewDidLoad()
方法中:
override func viewDidLoad()
{
super.viewDidLoad()
self.slider.addTarget(self, action: #selector(sliderTouchDownRepeat(_ :)), for: .touchDownRepeat)
}
您可以在选择器中做出相应的响应:
@objc func sliderTouchDownRepeat(_ slider: UISlider)
{
//Respond to double tap here
}
这一切都很好,尽管如果您计划在识别到双击时更改滑块值,则需要一些额外的代码。
首先,还要为UIControlEvents.valueChanged
override func viewDidLoad()
{
super.viewDidLoad()
self.slider.addTarget(self, action: #selector(sliderTouchDownRepeat(_ :)), for: .touchDownRepeat)
self.slider.addTarget(self, action: #selector(sliderDidChange(_:)), for: .valueChanged)
}
取消我们正在响应的当前触摸事件,以便滑块拇指不会立即返回到双击位置slider.cancelTracking(with: nil)
并调用操作UIControlEvents.valueChanged
@objc func sliderTouchDownRepeat(_ slider: UISlider)
{
slider.cancelTracking(with: nil)
// Perform your own value change operation
// self.reset()
self.sliderDidChange(slider)
}
@objc func sliderDidChange(_ slider: UISlider)
{
//Update any other UI here
}
快乐编码