代码之家  ›  专栏  ›  技术社区  ›  senty

转到UISlider的点击位置

  •  0
  • senty  · 技术社区  · 10 年前

    我有一个 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)
    
    }
    

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

    2 回复  |  直到 9 年前
        1
  •  1
  •   jbbenni    10 年前

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

    尝试以下方法:

    let floatNewValue = Float(newValue)
    durationSlider.setValue(floatNewValue,animated: true)
    
        2
  •  0
  •   aahrens    10 年前

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

    您需要将CGFloat转换为Float。

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

    推荐文章