转到 UISlider 的点击位置

Go to tapped position of UISlider

我有一个 UISlider,我试图在用户点击到特定时间时移动位置,而不是移动拇指。

我试图通过 this topic and this answer 解决它,然后我采用了这种方法。这是我试过的:

var slider: UISlider! // and maxValue, etc added in viewDidLoad

func sliderTapped(gestureRecognizer: UIGestureRecognizer) {
    var pointTapped: CGPoint = gestureRecognizer.locationInView(self.view)

    var positionOfSlider: CGPoint = slider.frame.origin
    var widthOfSlider: CGFloat = slider.frame.size.width
    var newValue = ((pointTapped.x - positionOfSlider.x) * CGFloat(slider.maximumValue) / widthOfSlider)

    slider.setValue(Float(newValue), animated: true)

}

但是,它不允许我在滑块上的任何位置获取点击值。它只能让我握住拇指并滑动它,但不能敲击。

UISlider的方法是func setValue(_ value: Float, animated animated: Bool)

您需要将 CGFloat 转换为 Float。

所以durationSlider.setValue(Float(newValue), animated: true)

嗯,这个错误是合法的。如果检查 setValue 的操作数,您会看到几种可能的调用序列。您可能想要的那个需要一个 Float(而不是 CGFloat)——但还需要一个 animation: 布尔标志。

试试这样的:

let floatNewValue = Float(newValue)
durationSlider.setValue(floatNewValue,animated: true)