在Swift中自动移动UISlider

问题描述:

我想在按下按钮时将UISlider从minValue移动到maxValue,并在再次按下按钮时将其停在当前位置,我想使用Swift。在Swift中自动移动UISlider

我得到的主要问题是函数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) 
} 

您可以使用时间自动移动滑块。 在全局范围内创建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; 


if(reversing) 
    { 
    newel = slider.value - increment; 
} 
else 
{ 
    newel = 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 
    } 
+0

它的工作,虽然滑块从左到右移动,而不是从右到左移动。 –

+0

更新了答案! – Darshana

此代码正在工作,但滑块只能从左到右移动,而不是从右到左达到最大值时,它应该从左向右移动,然后从右向左移动直到失效。

@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) 
     } 
    }