UISlider с шагом 5 - PullRequest
       29

UISlider с шагом 5

64 голосов
/ 26 марта 2010

Как мне получить UISlider с 1-100 с шагом 5?

Ответы [ 6 ]

155 голосов
/ 26 марта 2010

Добавьте цель как это:

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];
47 голосов
/ 16 ноября 2015

Немного более элегантным решением в 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. Вы можете узнать больше о настройке в моем посте .

7 голосов
/ 07 октября 2011

Существует еще один способ активировать функцию шагового двигателя. работает в общем случае

Пример:

диапазон данных от 0 до 2800, и я хочу, чтобы приращения составляли 25 единиц измерения. Я бы сделал следующее

  1. установить диапазон ползунка равным 0 - (maxRange / unitteps).
  2. при запуске метода с измененным значением используйте (int) slider.value * unitsteps.

в приведенном выше примере мой слайдер будет установлен в IB в диапазоне от 0 до 112. и мой код будет (int) slider.value * 25.

если у вас есть текстовое поле, которое можно изменить для прямого ввода, вы просто сделаете противоположное, установив значение ползунка в [textfield.text intValue] / unitsteps.

6 голосов
/ 20 июля 2015

Для тех, кто ищет синтаксис 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)
}

В качестве альтернативы, просто создайте функцию Action с помощью помощника редактора (что я и сделал в конечном итоге) ...

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

}
5 голосов
/ 13 апреля 2017

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

}
0 голосов
/ 26 апреля 2016
1. In storyboard mode, drag and drop a stepper and label.  the label will show the stepper values. 
  1. щелкните левой кнопкой мыши и перетащите метку и шагер на контроллер представления в качестве выходов.

имя метки как "stepperValue"

  1. Снова перетащите степпер, сделав его функциональным - я назвал мой "func"

@ IBAction func inc (отправитель: AnyObject) {
stepperValue.text = "(Int (stepper.value) * 5)"

нажмите на шаговый регулятор, и он увеличится на 5

...