我正在制作守望套件中的自定义滑块。我有一个CGFloat
类型的变量sliderPosition
,该变量可以在didSet
上的UI上设置其位置。我使用数字皇冠更改滑块的价值。
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 sliderposion在0到1之间。
在上述方法中, isValidRange
逻辑有一些错误。因为当值为1.00时,我尝试增加值时,它将设置为1.01,而对于0.00时,则将其设置为-0.01。
@ 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)
}
}