UISlider con incrementos de 5

¿Cómo puedo hacer que mi UISlider vaya de 1-100 a 1-100 en incrementos de 5 ?

Agrega un objective como este:

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

Y en la función valueChanged, establezca el valor en el valor más cercano divisible por 5.

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

Una solución un poco más elegante en Swift podría ser algo como esto

 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 } 

De esta manera obtendrá los pasos de 5. Puede leer más sobre la configuración en mi publicación .

Hay otra manera de activar la funcionalidad de paso a paso. trabaja en un caso general

Ejemplo:

el rango de datos es 0 – 2800 y quiero que los incrementos estén en 25 valores de unidad. Haría lo siguiente

  1. configure el rango del control deslizante para que sea 0 – (maxRange / unitsteps).
  2. cuando el valor cambiado el método se ejecuta use (int) slider.value * unitsteps.

en el ejemplo anterior, mi control deslizante se establecería en IB en el rango 0 – 112. y mi código sería (int) slider.value * 25.

si luego tiene un campo de texto que se puede modificar para la entrada directa, simplemente haría lo contrario, establezca el valor del deslizador en [textfield.text intValue] / unitsteps.

Para cualquiera que busque la syntax de 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) } 

Alternativamente, simplemente crea una función de Acción con el Editor Asistente (lo que hice al final) …

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

En swift 3, deslizador con incrementos +/- 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)") } 
 1. In storyboard mode, drag and drop a stepper and label. the label will show the stepper values. 
  1. Haga clic con el botón izquierdo y arrastre tanto la etiqueta como el paso a su controlador de vista como puntos de venta.

etiqueta de nombre como “stepperValue”

  1. arrastra y suelta stepper otra vez haciéndolo un func- Yo llamé al mío “func”

@IBAction func inc (remitente: AnyObject) {
stepperValue.text = “(Int (stepper.value) * 5)”

haga clic en el paso a paso y se incrementará en 5