我想从左向右移动一个 UISlider
,一旦它达到 maximumValue
,它就会向左移动,直到它达到 minimumValue
然后再次移动到 maximumValue
。
我正在使用此代码,包括用于慢速移动的计时器。
但问题是,一旦它达到 maximumValue
,如果 cause 被触发,它会在第一个增量后移动一个增量,然后再次向前移动,导致 slider 在循环中来回跳转一步一旦 maximumValue
被击中。
我已经尝试使用 backwards bool 变量来告诉 if 因为它只能向后移动,但初始 false 值被拾取得非常“圆”。
我希望你明白了。
@IBAction func setSliderValue(_ sender: UIButton){
mytimer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(timerAction), userInfo: nil, repeats: true)
}
func timerAction(){
let Range = slider.maximumValue - slider.minimumValue;
let Increment = Range/100;
var newval = slider.value + Increment;
var backwards : Bool = false
if(slider.value != slider.maximumValue && backwards == false){
slider.setValue(newval, animated: true)
print("The value of the slider is now \(slider.value)")
sliderValue = Int(slider.value)
print("1. \(backwards)")
}
else if (slider.value == slider.maximumValue || slider.value != slider.maximumValue){
newval = slider.value - 1
print("newval : \(newval)")
print("slider.value : \(slider.value)")
slider.setValue(newval, animated: true)
backwards = true
print("2. \(backwards)")
}
}
最佳答案
答案和上面差不多。它更像是我推荐的样式符号,因为它增加了项目的可读性: (普通变量的驼峰式大小写/大写类,枚举来区分可能的状态而不是 if/else)
var sliderState = SliderState.Incrementing
enum SliderState {
case Incrementing
case Decrementing
}
func timerAction() {
let range = slider.maximumValue - slider.minimumValue
let increment = range/100
switch slider.value {
case slider.maximumValue:
sliderState = .Decrementing
case slider.minimumValue:
sliderState = .Incrementing
default:
break
}
switch sliderState {
case .Incrementing:
slider.setValue(slider.value + increment, animated: true)
case .Decrementing:
slider.setValue(slider.value - increment, animated: true)
}
}
关于ios - 在 Swift 中从左到右循环 UISlider,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41414735/