2016-12-28 88 views
0

我想在按下按鈕時將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) 
} 

回答

0

您可以使用時間自動移動滑塊。 在全局範圍內創建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

0

此代碼正在工作,但滑塊只能從左到右移動,而不是從右到左達到最大值時,它應該從左向右移動,然後從右向左移動直到失效。

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