在Swift中从左到右循环UISlider,反之亦然

时间:2017-01-01 10:17:42

标签: ios swift slider

我想从左向右移动UISlider,一旦它到达maximumValue,它就会向左移动,直到它到达minimumValue,然后再次移动到{{1} }}。

我正在使用此代码,包括用于缓慢移动的计时器。

但问题是,一旦命中maximumValue,它会在第一个后面移动一个增量,如果原因被触发,它再次向前移动,导致滑块在循环中来回跳一步{ {1}}被击中了。

我已经尝试使用向后布尔变量来判断它是否只会向后移动但是初始的错误值会被非常“回合”。

我希望你有这个概念。

maximumValue

2 个答案:

答案 0 :(得分:1)

问题的一部分是你的timerAction func每0.1秒调用一次,你试图使用向后bool作为滑块移动方式的某种指示,但每次调用func时,你在第四行将bool设置为false。因此,为了完成您要做的事情,您需要将bool声明为类变量。

其次,你的一些代码对我来说似乎没有多大意义。我将包括一个我认为更好的版本:

MainActivity.java

请告诉我这是否适合您。

答案 1 :(得分:1)

答案与上述相同。它更像是我推荐的样式符号,因为它增加了项目的可读性: (camelCase用于正常变量/大写类,枚举用于区分可能的状态而不是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)
    }
}
相关问题