iOS UISlider如何强制值和拇指位置之间的同步?

时间:2013-10-31 11:06:36

标签: ios uislider

我正在使用自定义UISlider。我使用slider.value在用户输入后保存值。过了一会儿,我需要使用[slider setValue:savedValue]将幻灯片的位置恢复为其保存的值。

但我注意到保存时的位置与恢复后的位置之间存在一些差异。

过了一会儿,我发现如果用户非常快速地移动拇指,它会超过实际值(某种动量/惯性效应)。如何确保一个值对应于一个拇指位置?

由于

2 个答案:

答案 0 :(得分:2)

您是将该值视为整数吗? 因为它(UISlider对象)存储一个浮点数,将其视为整数会导致此行为。 也许在你处理变更的行动中重新设置它,我发现这需要一两次之前.. 例如(这连接到滑块(值已更改)controlEvent ....

-(IBAction) sliderMoved:(id)sender{

UISlider *sld = (UISlider *)sender;
CGFloat val = sld.value;
val += 0.49; /// rounder...

int result = (int) val;

[sld setValue:(CGFLoat)result animated:YES];

///// etc process entry..


}

这种处理将滑块转换为多位置“开关”,它会捕捉到整数值。如果你想留在浮动区域,你可以用fabsf(...)函数来做...

答案 1 :(得分:2)

假设您正在捕捉UIControlEventTouchUpInside来指示'已完成',请改用UIControlEventEditingDidEnd

如果失败,您可以键值观察value,在每次更改时取消将来的保存,如果tracking为假,则从现在起安排新的0.5秒。 E.g。

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(storeValue) object:nil];

if(!slider.tracking)
{
    [self performSelector:@selector(storeValue) withObject:nil afterDelay:0.5];
}

(或者如果发现任何性能问题,我会猜测是否安排了保存,但除非必须,否则不要过度复杂化)

相关问题