2017-03-03 65 views
1

我正在watchKit中創建一個自定義滑塊。我有一個變量sliderPosition,其類型爲CGFloat,它在UI上的位置爲didSet。我使用Digital Crown更改滑塊的值。給變量類型一個範圍CGFloat

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 
     } 
    } 

我尋找一些本地函數以得到範圍爲0之間我的變種sliderPosition爲1

在上述方法isValidRange有在邏輯一些錯誤。因爲當值爲1.00時,我嘗試增加值,它將設置爲1.01,當0.00設置爲-0.01時,值將相同。

+1

看一看http://stackoverflow.com/questions/36110620/standard-way-to-clamp-a-number-between-two-values-in-swift各種限制(「鉗位」)給定範圍值的方法。 –

+0

@MartinR Thnx僅供參考。 –

回答

1

正如@馬丁 - [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) 
    } 
} 
+0

事實上,它的工作原理。 Thnx Basha。 –