转到 UISlider 的点击位置

Posted

技术标签:

【中文标题】转到 UISlider 的点击位置【英文标题】:Go to tapped position of UISlider 【发布时间】:2016-01-05 16:41:42 【问题描述】:

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

我尝试通过this topic 和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)


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

【问题讨论】:

【参考方案1】:

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

尝试类似:

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

【讨论】:

是的,这解决了问题。我刚刚更新了这个问题。这并没有帮助我实现我想要实现的目标【参考方案2】:

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

您需要将 CGFloat 转换为 Float。

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

【讨论】:

它消除了错误,但在点击时不会改变滑块的值。如果我握住拇指并滑动,它只会移动滑块。你有什么主意吗?编辑:刚刚更新了问题

以上是关于转到 UISlider 的点击位置的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中自动移动 UISlider

UISlider 固定位置以保存值?

如何获取 UISlider 拇指位置

点击以编程方式创建的 UISlider

Swift 检测 UISlider 图像点击

如何强制 UISlider 值和拇指位置之间的同步?