Я знаю, что этот вопрос старый, но я просто хочу поделиться тем, как я это сделал.
Предполагая, что объект UISlider уже инициализирован, сначала необходимо установить минимальное и максимальное значения объекта UISlider:
mySlider.minimumValue = -2.0;
mySlider.maximumValue = 2.0;
Затем установите селектор, который будет обрабатывать изменения в ползунке:
[mySlider addTarget:self action:@selector(sliderDidChangeValue:) forControlEvents:UIControlEventValueChanged];
Кроме того, установите интервал (для свойства). Важно, чтобы интервал был положительным. (И действительно, ИНТЕРВАЛ ДОЛЖЕН БЫТЬ ПОЗИТИВНЫМ.)
self.interval = 0.5 //_interval is float
Объявите метод (ы):
- (void)sliderDidChangeValue:(id)sender
{
UISlider *slider = (UISlider *)sender;
//Round the value to the a target interval
CGFloat roundedValue = [self roundValue:slider.value];
//Snap to the final value
[slider setValue:roundedValue animated:NO];
}
- (float)roundValue:(float)value
{
//get the remainder of value/interval
//make sure that the remainder is positive by getting its absolute value
float tempValue = fabsf(fmodf(value, _interval)); //need to import <math.h>
//if the remainder is greater than or equal to the half of the interval then return the higher interval
//otherwise, return the lower interval
if(tempValue >= (_interval / 2.0)){
return value - tempValue + _interval;
}
else{
return value - tempValue;
}
}