【问题标题】:Move UISlider automatically in Swift在 Swift 中自动移动 UISlider
【发布时间】:2016-12-28 11:46:21
【问题描述】:

我想在你点击按钮时将 UISlider 从 minValue 循环移动到 maxValue 并在再次点击按钮时将其停止在当前位置,我想使用 Swift。

我遇到的主要问题是函数slider.setValue() 太快了,我希望动画更慢。

@IBAction func setSliderValue(_ sender: UIButton){
        slider.setValue(100, animated: true)
        print("The value of the slider is now \(slider.value)")
        sliderValue = Int(slider.value)
}

【问题讨论】:

    标签: ios swift uislider


    【解决方案1】:

    您可以使用时间来自动移动滑块。 在全局范围内创建 NSTimer 变量: 还要在全局范围内创建一个 Bool 变量,用于检查是否需要修改它。

    var  mytimer : NSTimer?
    var  reversing : Bool?
    

    当你想要动画时启动计时器:

    reversing = NO;
    mytimer =  NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: #selector(timerAction), userInfo: nil, repeats: true)
    

    在计时器动作上,您可以编写代码来更改滑块的值:

    var sliderrange =  slider.maxValue - slider.minValue;
    var increment = sliderrange/100;
    var newval = slider.value;
    
    newel = reversing ? (slider.value - increment) : (slider.value + increment);
    
    if(newval >= slider.maxValue)
    {
      reversing = true;
       newval = newval - 2*increment;
    
    }
    else  if(newel <= 0)
    {
      reversing = false;
    }
     slider.setValue(newval, animated: true)
    

    在按钮操作上,你可以停止计时器,

     if mytimer != nil {
        mytimer!.invalidate()
        mytimer = nil
      }
    

    【讨论】:

    • 它的工作,虽然滑块从左到右移动,而不是从右到左返回。
    • 更新答案!
    【解决方案2】:

    这个代码是有效的,虽然滑块只从左到右移动,而不是在达到最大值时从右到左移动,它应该从左到右然后从右到左移动,直到失效。

    @IBAction func setSliderValue(_ sender: UIButton){
            mytimer =  Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(timerAction), userInfo: nil, repeats: true)
            /*slider.setValue(100, animated: true)
            print("The value of the slider is now \(slider.value)")
            sliderValue = Int(slider.value)*/
        }
    
    
        func timerAction(){
            let Range =  slider.maximumValue - slider.minimumValue;
            let Increment = Range/100;
            let newval = slider.value + Increment;
            if(Increment <= slider.maximumValue)
            {
                slider.setValue(newval, animated: true)
                print("The value of the slider is now \(slider.value)")
                sliderValue = Int(slider.value)
            }
            else if (Increment >= slider.minimumValue)
            {
                slider.setValue(newval, animated: true)
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多