【发布时间】:2011-04-11 06:37:48
【问题描述】:
我需要为 UISlider 设置间隔值。
请帮忙..
【问题讨论】:
标签: iphone objective-c uislider
我需要为 UISlider 设置间隔值。
请帮忙..
【问题讨论】:
标签: iphone objective-c uislider
yourSlider.value = x;
你真的应该阅读文档,iOS Developer Center 中有很多很棒的资源。
编辑:关于您在 cmets 中更具体的问题:
yourSlider.minimumValue = -10;
yourSlider.maximumValue = 10;
[yourSlider addTarget:self action:@selector(roundValue) forControlEvents:UIControlEventValueChanged];
- (void)roundValue{
yourSlider.value = round(yourSlider.value);
}
【讨论】:
UIControlEvenValueChanged 上,你将slider.value 取整。
round(yourSlider.value) 并跳过所有其余部分。
- (void)roundValue{更改为- (void)roundValue:(id)sender{
灵活的解决方案:
// 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;
}
}
}
【讨论】:
我知道这个问题很老,但我只是想分享一下我是如何做到的。
假设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;
}
}
【讨论】:
int sliderValue = kSliderInterval * floor((slider.value / kSliderInterval) + 0.5);
【讨论】:
UISliders 不会“增加”它们的价值,它们会根据触摸的方式增加或减少其价值。您可以使用这些属性来设置滑块限制:
slider.minimumValue = 0.0;
slider.maximumValue = 0.5;
【讨论】:
我建议将级别放在要放置值的滑块下方并设置最大值和最小值,然后可以通过点数和除法计算中间值,最后在 uilabel 中显示值。 希望这会有所帮助
祝你好运
【讨论】: