web-dev-qa-db-ja.com

5刻みのUISlider

1-100から5単位でUISliderを取得するにはどうすればよいですか?

67
Tyler29294

次のようなターゲットを追加します。

slider.continuous = YES;
[slider addTarget:self
      action:@selector(valueChanged:) 
      forControlEvents:UIControlEventValueChanged];

また、valueChanged関数で、値を5で割り切れる最も近い値に設定します。

[slider setValue:((int)((slider.value + 2.5) / 5) * 5) animated:NO];

5以外の間隔が必要な場合は、次のように設定します。

float interval = 5.0f;//set this
[slider setValue:interval*floorf((slider.value/interval)+0.5f) animated:NO];
158
Tuomas Pelkonen

Swift=

let step: Float = 5
@IBAction func sliderValueChanged(sender: UISlider) {
  let roundedValue = round(sender.value / step) * step
  sender.value = roundedValue
  // Do something else with the value

}

この方法で5のステップを取得できます。セットアップの詳細については、my post を参照してください。

48
Jure

ステッパー機能をアクティブにする別の方法があります。一般的なケースで動作します

例:

データの範囲は0〜2800で、増分を25単位の値にする必要があります。私は次のことをします

  1. スライダーの範囲を0-(maxRange/unitsteps)に設定します。
  2. 値が変更されたメソッドが実行されるとき、use(int)slider.value * unitsteps。

上記の例では、IBのスライダーは0〜112の範囲に設定され、コードは(int)slider.value * 25になります。

次に、直接入力用に変更できるテキストフィールドがある場合は、反対にスライダー値を[textfield.text intValue]/unitstepsに設定するだけです。

9
MB.

Swift構文を探している人には...

override func viewDidLoad() {
    super.viewDidLoad()
    mySlider.addTarget(self, action: "sliderValueDidChange:", forControlEvents: .ValueChanged)
}

func sliderValueDidChange(sender:UISlider!)
{
    //Set value to the nearest 5...
    print((Float)((Int)((sender.value + 2.5) / 5) * 5))
    sender.setValue((Float)((Int)((sender.value + 2.5) / 5) * 5), animated: false)
}

あるいは、アシスタントエディターでアクション関数を作成するだけです(最終的に私がやったこと)...

@IBAction func mySliderValueChanged(sender: UISlider) {
    //Set value to the nearest int
    sender.setValue(Float(roundf(sender.value)), animated: false)

}
6
Justin Domnitz

In Swift 3、増分+/- 7のスライダー:

@IBOutlet weak var sldComponent: UISlider!

...

sldComponent.addTarget(self, action:  #selector(_sldComponentChangedValue),for: .valueChanged)

...

func _sldComponentChangedValue(sender: UISlider!) {

        self.sldComponent.setValue((round(sender.value / 7) * 7), animated: false)
        print("\(sender.value)")

}