将 UISlider 旋钮移动到中间,同时双击它

Move UISlider knob to middle while double tap on it

我想 UISlider 旋钮移到中间,或者在我的情况下 0.0 值,当双击事件发生时.

双击时旋钮会移动到 0.0,但它会立即恢复到旧的 position/value。

我试过下面的代码。任何帮助将不胜感激。

override func viewDidLoad() {

  super.viewDidLoad() 

  let eqSlider = UISlider(frame:CGRectMake(0, 0, 160, 40))
  eqSlider.minimumValue = -12.0
  eqSlider.maximumValue = 12.0
  eqSlider.value = 0.0
  self.view.addSubview(eqSlider)

  // detecting double tap on slider method                
  eqSlider.addTarget(self, action: #selector(EQViewController.doubleTappedSlider(_:event:)), forControlEvents: .TouchDownRepeat)
}

func doubleTappedSlider(sender: UISlider, event: UIEvent) {
  if let firstTouchObj = event.allTouches()?.first {
    if 2 == firstTouchObj.tapCount {
      sender.value = 0.0
    }
  }
}

问题是双击中的两次点击也会受到滑块本身的影响,因此在您手动设置其位置后,用户直接将其设置回来。

为避免这种情况,您可以在设置 .value 后添加以下行:

sender.cancelTracking(with: nil)

这将 "cancel any ongoing tracking" 如 the documentation 所述。