iphone - UISlider con incrementos de 5
ios (6)
¿Cómo hago que mi UISlider
pase de 1-100
a 1-100
en incrementos de 5
?
Agrega un objetivo 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 que sea divisible por 5.
[slider setValue:((int)((slider.value + 2.5) / 5) * 5) animated:NO];
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)")
}
Hay otra forma de activar la funcionalidad paso a paso. trabaja en un caso general
Ejemplo:
el rango de datos es 0 - 2800 y quiero que los incrementos estén en valores de 25 unidades. Yo haria lo siguiente
- configure el rango del control deslizante en 0 - (maxRange / unitsteps).
- cuando se ejecute el método de valor cambiado use (int) slider.value * unitsteps.
en el ejemplo anterior, mi control deslizante se establecería en IB entre 0 y 112. y mi código sería (int) control deslizante.valor * 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 control deslizante en [textfield.text intValue] / unitsteps.
Para quien busca la sintaxis 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 cree una función de Acción con el Editor Asistente (lo que hice en última instancia) ...
@IBAction func mySliderValueChanged(sender: UISlider) {
//Set value to the nearest int
sender.setValue(Float(roundf(sender.value)), animated: false)
}
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ás pasos de 5. Puedes leer más sobre la configuración en mi post .
1. In storyboard mode, drag and drop a stepper and label. the label will show the stepper values.
- Haga clic con el botón izquierdo y arrastre ambas etiquetas y pasos a su controlador de vista como puntos de venta.
etiqueta de nombre como "stepperValue"
- Arrastrar y soltar stepper otra vez haciéndolo una func- llamé mía "func"
@IBAction func inc (sender: AnyObject) {
stepperValue.text = "(Int (stepper.value) * 5)"
haga clic en el paso a paso y se incrementará en 5