设置UISlider的间隔值

时间:2011-04-11 06:37:48

标签: iphone objective-c uislider

我需要设置UISlider的间隔值。

请帮忙..

6 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:5)

灵活的解决方案:

    // 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;
            }
        }           
    }

答案 2 :(得分:4)

我知道这个问题已经过时但我只是想分享一下我是如何做到的。

假设UISlider对象已经初始化,首先,必须设置UISlider对象的最小值和最大值:

mySlider.minimumValue = -2.0;
mySlider.maximumValue = 2.0;

然后,设置将处理滑块中的更改的选择器:

[mySlider addTarget:self action:@selector(sliderDidChangeValue:) forControlEvents:UIControlEventValueChanged];

另外,设置间隔(到属性)。间隔是正的很重要。 (而且,实际上,INTERVAL必须是积极的。)

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 :(得分:3)

int sliderValue =  kSliderInterval * floor((slider.value / kSliderInterval) + 0.5);

答案 4 :(得分:1)

UISliders不要“增加”他们的价值,他们会根据他们的触摸方式增加或减少他们的价值。您可以使用这些属性来设置滑块限制:

slider.minimumValue = 0.0;
slider.maximumValue = 0.5;

答案 5 :(得分:0)

我建议将水平放在滑块下方,你想要放置值并设置最大值和最小值,然后可以通过no和point来计算中间值,最后在uilabel中显示值。 希望这会有所帮助

祝你好运