将 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 所述。
我想 将 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 所述。