2017-03-03 12 views
1

私はwatchKitでカスタムスライダを作成しています。私は1つの変数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 
     } 
    } 

私は上記の方法では1

に0〜私のvar sliderPositionに範囲を与えるために、いくつかのネイティブ関数を探していますisValidRangeロジックでは多少の誤差があります。値が1.00で値を増やそうとすると、1.01に設定され、0.00に設定すると-0.01に設定されるためです。

+1

http://stackoverflow.com/questions/36110620を見てください/標準的なウェイからクランプへの2つの値の間で、ある範囲に値を制限( "クランプ")するためのさまざまな方法のための迅速な方法です。参照のために –

+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。 –