我想要的是一个UISlider,它不仅允许用户在启动thumbRect时滑动,而且还允许用户在其他地方点击时滑动。当用户点击滑块但在thumbRect之外时,滑块应该跳到这个值,然后仍然保持用户的滑动姿态。
到目前为止,我尝试的是实现UIGestureRecognizer的一个子类,比如in this suggestion。当thumbRect之外的某个地方发生触摸时,它就开始了。问题是滑块设置了它的值,但是由于触下识别器窃取了触摸,所以忽略了进一步的滑动手势。
我如何实现一个滑块,你可以点击任何地方,但仍然是立即滑行?
编辑: ali59a很好地添加了我现在所做的事情的an example。这需要再次举起手指,之后我可以触摸和拖动滑梯(我不想要点击,我需要一个“触摸和滑动”马上)。
发布于 2017-11-16 02:29:29
我没有检查David answer,但我会发布我的解决方案,以防有人在寻找其他方法。
Swift 4
首先,创建一个自定义UISlider,以便它还可以检测到条形图上的触摸:
class CustomSlider: UISlider {
override func beginTracking(_ touch: UITouch, with event: UIEvent?) -> Bool {
return true
}
}(别忘了将滑块设置为CustomSlider,在故事板上)
显示滑块的视图控制器的on viewDidLoad:
self.slider.addTarget(self, action: #selector(sliderTap), for: .touchDown)(这只用于在移动滑块时暂停播放机)
然后,在UISlider操作中:
@IBAction func moveSlider(_ sender: CustomSlider, forEvent event: UIEvent) {
if let touchEvent = event.allTouches?.first {
switch touchEvent.phase {
case .ended, .cancelled, .stationary:
//here, start playing if needed
startPlaying()
default:
break
}
}
}在您的"sliderTap“选择器方法上:
@objc func sliderTap() {
//pause the player, if you want
audioPlayer?.pause()
}建议:在开始播放前设置播放器"currentTime“:
private func startPlaying() {
audioPlayer?.currentTime = Double(slider.value)
audioPlayer?.play()
}https://stackoverflow.com/questions/22717167
复制相似问题