我正在使用自定义的UISlider。我使用slider.value保存用户输入后的值。过了一段时间,我需要使用[slider setValue:savedValue]将幻灯片的位置恢复到其保存的值。iOS UISlider如何强制执行值和拇指位置之间的同步?
但我注意到在保存时间的位置和恢复后的位置之间存在一些差异。
过了一段时间,我发现如果用户非常快地移动拇指,它会比实际值(某种动量/惯性效果)更进一步。我怎样才能确保一个值对应于一个拇指位置?
谢谢
我正在使用自定义的UISlider。我使用slider.value保存用户输入后的值。过了一段时间,我需要使用[slider setValue:savedValue]将幻灯片的位置恢复到其保存的值。iOS UISlider如何强制执行值和拇指位置之间的同步?
但我注意到在保存时间的位置和恢复后的位置之间存在一些差异。
过了一段时间,我发现如果用户非常快地移动拇指,它会比实际值(某种动量/惯性效果)更进一步。我怎样才能确保一个值对应于一个拇指位置?
谢谢
假设你正在捕捉UIControlEventTouchUpInside
来指示'已完成',请使用改为。
如果不成功,您可以键值观察value
,在每次更改时取消将来的保存,并且如果tracking
为假,则从现在开始计划新的0.5秒。例如。
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(storeValue) object:nil];
if(!slider.tracking)
{
[self performSelector:@selector(storeValue) withObject:nil afterDelay:0.5];
}
(或者明确地存储保存是否计划如果你发现这一说法,我想,任何性能问题,但除非你有没有过于复杂的话)
谢谢我认为我可以从中获得灵感,它会朝着正确的方向发展 – webaba
您是否将该值视为整数? 因为它(UISlider对象)存储一个浮点数,所以将其视为一个整数可能会导致此行为。 也许在处理该更改的操作中重新设置它,我发现此操作需要一次或两次。 EG(此挂在滑块(值改变)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(...)函数来执行此操作...
它可以帮助,如果你可以做一个有示范项目可以证明问题。 Github是做这件事的好地方... – ericg
是的,我不太明白。他们移动滑块,但是你想覆盖用户的移动? – nielsbot
记录的值对应于用户停止触摸屏幕时拇指的位置。然而,拇指继续移动(某些惯性动画),所以当你做一个setValue(getValue)时,它会移回到正确的位置 – webaba