75

どのようにすればUISlider1-100単位で開始できます5か?

4

7 に答える 7

167

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

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];
于 2010-03-25T21:32:44.580 に答える
70

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 のステップを取得します。セットアップの詳細については、私の投稿を参照してください。

于 2015-11-16T20:08:10.337 に答える
9

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

例:

データの範囲は 0 ~ 2800 で、増分を 25 単位の値にしたいと考えています。私は次のことをします

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

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

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

于 2011-10-07T15:15:20.110 に答える
7

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)

}
于 2015-07-20T17:29:34.597 に答える
7

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)")

}
于 2017-04-13T12:31:31.830 に答える
0

それだけではない理由:

@IBAction func onSlider(_ sender: UISlider) {
    let value = Int(sender.value)
    if value % 5 == 0 {
        // handle(value) ... 
    }
}
于 2021-10-07T02:29:33.847 に答える
-4
1. In storyboard mode, drag and drop a stepper and label.  the label will show the stepper values. 
  1. 左クリックして、ラベルとステッパーの両方をアウトレットとしてView Controllerにドラッグします。

ラベルに「stepperValue」という名前を付ける

  1. ステッパーをもう一度ドラッグ アンド ドロップして関数にします。私は「関数」と呼びました。

@IBAction func inc(sender: AnyObject) {
stepperValue.text = "(Int(stepper.value) * 5 )"

ステッパーをクリックすると、5ずつ増加します

于 2016-04-26T16:18:38.467 に答える