在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
}
答
此代码正在工作,但滑块只能从左到右移动,而不是从右到左达到最大值时,它应该从左向右移动,然后从右向左移动直到失效。
@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)
}
}
它的工作,虽然滑块从左到右移动,而不是从右到左移动。 –
更新了答案! – Darshana