【发布时间】:2011-09-20 13:35:47
【问题描述】:
我需要为 UISlider 设置 0.02 的时间间隔,并且在 valueChanged 方法中,当滑块的值恰好更改为 0.02 时,我需要反映一些东西。比如 0.02 ,0.04,0.08 ....
【问题讨论】:
标签: iphone objective-c cocoa-touch ios4 uislider
我需要为 UISlider 设置 0.02 的时间间隔,并且在 valueChanged 方法中,当滑块的值恰好更改为 0.02 时,我需要反映一些东西。比如 0.02 ,0.04,0.08 ....
【问题讨论】:
标签: iphone objective-c cocoa-touch ios4 uislider
只是做一些类似的事情
-(IBAction)valueChanged:(id)sender
{
if (sender.value == 2)
{
//do something here
}
}
编辑:
我刚刚意识到比较浮点数只是 c 和 Objective-c 中的一个痛苦。所以如果我是你,我会使用 int (2) 而不是 float (0.02),并在需要时将 int 转换为 float。
【讨论】:
要在UISlider 中实现离散值,您需要在valueChanged 方法中处理此逻辑。例如
-(void)valueChanged:(UISlider *)slider {
NSInteger value = (NSInteger) (slider.value+0.005)*100;
value = (value/2) * 2; //round down if necessary
[slider setValue:value/100.0 animated:NO];
}
如果需要,要读取调整后的值,它将是 value/100.0。
注意:也许您必须将滑块的continuous 属性设置为NO。
【讨论】:
我知道您想知道UISlider 的值何时增加/减少 0.02,所以:
我认为您必须存储 UISlider 的最后一个值。
-(IBAction)valueChanged:(id)sender {
UISlider * slider = (UISlider *) sender;
//using fabs() because maybe value decreased
if (fabs(slider.value - lastValue) == 0.02 )
{
//Your code here
}
lastVaule = slider.value;
}
【讨论】:
滑块中有正值和负值。 因此,以上所有答案对我都没有用。 即使我无法将滑块的新旧值的差异与 == 进行比较。 所以这是另一个问题。
这是我的工作代码。
float incDecTempoVal=0.02;
float val_tempo=[[NSString stringWithFormat:@"%.02f",sliderBMP.value] floatValue];
if (sliderBMP.value<0.0)
sliderBMP.value=sliderBMP.value-(incDecTempoVal-fabs(fmod(val_tempo,incDecTempoVal)));
else
sliderBMP.value=sliderBMP.value+(incDecTempoVal-fabs(fmod(val_tempo, incDecTempoVal)));
【讨论】: