给一个变量类型的CGFloat一个范围

时间:2017-03-03 06:05:29

标签: ios swift watchkit apple-watch

我在watchKit中创建了一个自定义滑块。我有一个类型sliderPosition的变量CGFloat,它在didSet上的UI上设置其位置。我使用Digital Crown更改了滑块的值。

func didCrown(value: Double, rps: Double) {
        if isValidRange() {
            if value > 0 {
                ring.sliderPosition = ring.sliderPosition + 0.01
            } else if value < 0 {
                ring.sliderPosition = ring.sliderPosition - 0.01
            }
        }
    }

    func isValidRange() -> Bool {
        if ring.sliderPosition >= 0.00 && ring.sliderPosition <= 1.00 {
            return true
        } else if ring.sliderPosition <= 0.0 {
            ring.sliderPosition = 0
            return false
        } else {
            ring.sliderPosition = 1
            return false
        }
    }

我正在寻找一些原生函数来为我的var sliderPosition提供0到1之间的范围。

在上面的方法isValidRange中,逻辑中存在一些错误。因为当值为1.00并且我尝试增加该值时它将设置为1.01,并且当它设置为0.00时它也是相同的。

1 个答案:

答案 0 :(得分:1)

正如@ Martin R所说,可能你正在寻找 -

 extension CGFloat {
    func clamp (min: CGFloat, _ max: CGFloat) -> CGFloat {
        return Swift.max(min, Swift.min(max, self))
    }
 } 

然后像 -

一样使用它
func didCrown(value: Double, rps: Double) {
       if value > 0 {
            ring.sliderPosition = (ring.sliderPosition + 0.01).clamp(min: 0.0, 1.0)
         } else if value < 0 {
             ring.sliderPosition = (ring.sliderPosition - 0.01).clamp(min: 0.0, 1.0)
     }
 }