【问题标题】:How do I slowly move my UISlider to the left or right with a touch of a button?如何通过轻触按钮将 UISlider 缓慢地向左或向右移动?
【发布时间】:2016-07-16 03:11:00
【问题描述】:

我有这两个按钮,如果我按下左侧的按钮,我希望滑块一直缓慢地向左移动,当我按下右侧的按钮以一直移动滑块时也是如此向右。我现在的代码非常快速地移动滑块,我希望它是逐渐的。

override func didMoveToView(view: SKView) {

        middleSlider = UISlider(frame: CGRectMake(self.view!.bounds.width/2 - 150/2, self.view!.bounds.height/2 * 1.7, 150, 50))
        middleSlider.tintColor = UIColor.whiteColor()
        middleSlider.minimumTrackTintColor = UIColor.whiteColor()
        middleSlider.maximumTrackTintColor = UIColor.whiteColor()
        middleSlider.setThumbImage(UIImage(named: "mixerb1"), forState: UIControlState.Normal)
        middleSlider.maximumValue = 2.0
        middleSlider.minimumValue =  0.0
        middleSlider.value = 1.0
        middleSlider.continuous = true
        middleSlider.userInteractionEnabled = true
        middleSlider.addTarget(self, action: #selector(middleSliderChangeAudio), forControlEvents: UIControlEvents.AllEvents)
        self.view?.addSubview(middleSlider)

}


override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        let location = touch.locationInNode(self)
        let node = self.nodeAtPoint(location)


        if node.name == "left" {
        print("slider moves to left")

        UIView.animateWithDuration(10.0, animations: {
            self.middleSlider.value = self.middleSlider.minimumValue
            self.middleSlider.continuous = true
      }
   )
}


    if node.name == "right" {
    print("slider moves to right")

        UIView.animateWithDuration(10.0, animations: {
            self.middleSlider.value = self.middleSlider.maximumValue
            self.middleSlider.continuous = true
            }
        )
    }
}

【问题讨论】:

  • 问题是self.middleSlider.value不是动画属性,所以你根本没有得到任何动画。
  • 我应该使用什么?

标签: ios swift uislider


【解决方案1】:

在这里使用 setValue(_:animated:) 方法Documentation。 告诉我们进展如何。

添加后,将其包装在动画中,持续时间如下所示。请注意,10 秒只是一个硬编码值,将持续时间更改为您想要的任何值,您想要设置的值也是如此。

@IBAction func moveSlider(sender: UIButton) {
    UIView.animateWithDuration(10, animations: {
        self.slider.setValue(1.0, animated: true)
    })


}

当您使用它时,向上滚动一点以查看属性值的文档。这样您就可以更好地了解正在发生的事情。

【讨论】:

  • 问题是你不能设置速度,反正它坏了。
  • 然后用 duration() 将它包装在一个动画中,我在 Xcode 7.3 上测试了它,它工作得很好
  • 在编辑之前我没有特别提到 animateWithDuration 因为 OP 已经有了它,所以我只是指向他的方向,而不是设置属性值调用 setValue 方法,也要求他检查文档的价值,这样他就知道实际发生了什么
  • 是的,我现在明白了,它也有效。我有一个问题,那就是当我将属性连续设置为 true 时,为什么它不更新滑块?滑块仅在我用手指移动时有效,但在我使用按钮时无效。
  • 我必须查看该按钮的代码。您的 IBAction 怎么样?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多