UISlider with increments of 5

IphoneIosUislider

Iphone Problem Overview


How do I have my UISlider go from 1-100 in increments of 5?

Iphone Solutions


Solution 1 - Iphone

Add a target like this:

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

And in the valueChanged function set the value to the closest value that is divisible by 5.

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

So if you need any interval other than 5 simply set it like so:

float interval = 5.0f;//set this
[slider setValue:interval*floorf((slider.value/interval)+0.5f) animated:NO];

Solution 2 - Iphone

A slightly more elegant solution in Swift could be something like this

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
 
}

This way you get steps of 5. You can read more about the setup in my post.

Solution 3 - Iphone

There is another way to active the stepper functionality. works in a general case

Example:

range of data is 0 - 2800 and I want the increments to be in 25 unit values. I would do the following

  1. set up the range of the slider to be 0 - (maxRange/unitsteps).
  2. when the value changed method runs use (int)slider.value * unitsteps .

in the example above my slider would be set in IB to range 0 - 112. and my code would be (int)slider.value * 25.

if you then have a text field that can be modified for direct input you would just do the opposite set the slider value to the [textfield.text intValue]/ unitsteps.

Solution 4 - Iphone

For anyone looking for the Swift syntax...

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

Alternatively, just create an Action function with the Assistant Editor (what I did ultimately)...

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

}

Solution 5 - Iphone

In swift 3, slider with increments +/- 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)")
        
}

Solution 6 - Iphone

Why not just:

@IBAction func onSlider(_ sender: UISlider) {
    let value = Int(sender.value)
    if value % 5 == 0 {
        // handle(value) ... 
    }
}

Solution 7 - Iphone

1. In storyboard mode, drag and drop a stepper and label.  the label will show the stepper values. 

2. left click and drag both label and stepper to your view controller as outlets.

name label as "stepperValue"

  1. drag and drop stepper again making it a func- I called mine "func"

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

click the stepper and it will increment by 5

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionTyler29294View Question on Stackoverflow
Solution 1 - IphoneTuomas PelkonenView Answer on Stackoverflow
Solution 2 - IphoneJureView Answer on Stackoverflow
Solution 3 - IphoneMB.View Answer on Stackoverflow
Solution 4 - IphoneJustin DomnitzView Answer on Stackoverflow
Solution 5 - IphoneJavier Calatrava LlaveríaView Answer on Stackoverflow
Solution 6 - Iphoneag047View Answer on Stackoverflow
Solution 7 - IphoneLARA AnnView Answer on Stackoverflow