Установка значения интервала для UISlider - PullRequest
8 голосов
/ 11 апреля 2011

Мне нужно установить значение интервала для UISlider.

Пожалуйста, помогите ..

Ответы [ 6 ]

12 голосов
/ 11 апреля 2011

yourSlider.value = x;

Вы действительно должны прочитать документацию, множество отличных ресурсов в iOS Developer Center .

Редактировать: Что касается вашего более конкретного вопроса в комментариях:

yourSlider.minimumValue = -10;
yourSlider.maximumValue = 10;
[yourSlider addTarget:self action:@selector(roundValue) forControlEvents:UIControlEventValueChanged];

- (void)roundValue{
    yourSlider.value = round(yourSlider.value);
}
5 голосов
/ 10 мая 2011

Гибкое решение:

    // define MIN_VALUE, MAX_VALUE and INTERVAL somewhere, such as 3, 18 and 3

    slider.TouchUpInside += delegate {
        touchUpInside();
    };

    /// <summary>
    /// set value to one of intervals
    /// </summary>
    void touchUpInside(){

        // get the nearest interval value
        for(int i=MIN_VALUE; i<=MAX_VALUE; i=i+INVERVAL){

            if(slider.Value > i && slider.Value < i + INVERVAL){
                if(slider.Value - i < i + INVERVAL - slider.Value){
                    slider.Value = i;
                }else{
                    slider.Value = i + INVERVAL;
                }

                break;
            }
        }           
    }
4 голосов
/ 05 декабря 2013

Я знаю, что этот вопрос старый, но я просто хочу поделиться тем, как я это сделал.

Предполагая, что объект 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;
    }
}
3 голосов
/ 05 января 2016
int sliderValue =  kSliderInterval * floor((slider.value / kSliderInterval) + 0.5);
1 голос
/ 11 апреля 2011

UISliders не «увеличивают» их значение, они увеличивают или уменьшают их значение в зависимости от того, как к ним прикоснулись.Вы можете использовать эти свойства для установки пределов слайдера:

slider.minimumValue = 0.0;
slider.maximumValue = 0.5;
0 голосов
/ 11 апреля 2011

Я бы посоветовал поставить уровень чуть ниже ползунка, на который вы хотите поместить значение, и установить максимальное и минимальное значение, тогда промежуточное значение можно рассчитать по ни одной точке и по делению и, наконец, отобразить в uilabel значения. надеюсь, это поможет

удачи

...