UISlider avec des incréments de 5

Comment faire pour que mon UISlider passe de 1-100 par incréments de 5 ?

Ajoutez une cible comme celle-ci:

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

Et dans la fonction valueChanged, définissez la valeur sur la valeur la plus proche divisible par 5.

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

Une solution légèrement plus élégante dans Swift pourrait être quelque chose comme ça

 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 cette façon, vous obtenez des étapes de 5. Vous pouvez en savoir plus sur la configuration dans mon message .

Il existe une autre façon d'activer la fonctionnalité de stepper. travaille dans un cas général

Exemple:

La plage de données est comprise entre 0 et 2800 et je souhaite que les incréments soient en 25 valeurs unitaires. Je ferais ce qui suit

  1. Réglez la plage du slider sur 0 – (maxRange / unitsteps).
  2. lorsque la méthode change de valeur exécute use (int) slider.value * unitsteps.

Dans l'exemple ci-dessus, mon slider serait défini sur IB entre 0 et 112. Mon code serait (int) slider.value * 25.

Si vous avez ensuite un champ de text qui peut être modifié pour l'input directe, vous devez simplement faire l'inverse en définissant la valeur du slider sur [textfield.text intValue] / unitsteps.

Pour ceux qui searchnt la syntaxe 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) } 

Alternativement, il suffit de créer une fonction Action avec l'Assistant Editor (ce que j'ai fait finalement) …

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

Dans swift 3, slider avec incréments +/- 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. Cliquez gauche et faites glisser à la fois l'label et le stepper vers votre controller de vue en tant que sockets.

label de nom comme "stepperValue"

  1. glisser et déposer à nouveau le stepper en faisant un func- j'ai appelé le mien "func"

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

click le stepper et il va augmenter de 5