iOS UISlider如何强制值和拇指位置之间的同步?
我正在使用一个定制的UISlider。我使用slider.value保存用户输入后的值。过了一会儿,我需要使用[slider setValue:savedValue]将幻灯片的位置恢复到其保存的值 但是我注意到保存时间的位置和恢复后的位置之间存在一些差异 过了一段时间,我发现如果用户移动拇指的速度非常快,它会超过实际值(某种动量/惯性效应)。如何确保一个值对应一个拇指位置iOS UISlider如何强制值和拇指位置之间的同步?,ios,uislider,Ios,Uislider,我正在使用一个定制的UISlider。我使用slider.value保存用户输入后的值。过了一会儿,我需要使用[slider setValue:savedValue]将幻灯片的位置恢复到其保存的值 但是我注意到保存时间的位置和恢复后的位置之间存在一些差异 过了一段时间,我发现如果用户移动拇指的速度非常快,它会超过实际值(某种动量/惯性效应)。如何确保一个值对应一个拇指位置 谢谢您是否将该值视为整数? 由于它(UISlider对象)存储浮点,因此将其视为整数可能会导致此行为。。 也许在您处理更改的
谢谢您是否将该值视为整数? 由于它(UISlider对象)存储浮点,因此将其视为整数可能会导致此行为。。 也许在您处理更改的操作中重新设置它,我以前发现这是必要的。。 例如(这连接到滑块(值更改)控制事件…)
-(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(…)函数进行操作…是否将该值视为整数? 由于它(UISlider对象)存储浮点,因此将其视为整数可能会导致此行为。。 也许在您处理更改的操作中重新设置它,我以前发现这是必要的。。 例如(这连接到滑块(值更改)控制事件…)
-(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(…)函数,如果您也想保持在浮动区域…假设您正在捕获
UIControlEventTouchUpInside
来口述“已完成”,请改用uicontrolEventEditingDiEnd
否则,您可以在每次更改时按键值观察value
,取消以后的保存,如果tracking
为false,则从现在起0.5秒内安排一个新的
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(storeValue) object:nil];
if(!slider.tracking)
{
[self performSelector:@selector(storeValue) withObject:nil afterDelay:0.5];
}
(或者,如果您发现任何性能问题,则显式存储是否安排了保存,我猜,但除非必须,否则不要将其过度复杂化)假设您正在捕获
uicontroleventTouchInside
以指示“已完成”,请改用uicontroleventEditingDiEnd
否则,您可以在每次更改时按键值观察value
,取消以后的保存,如果tracking
为false,则从现在起0.5秒内安排一个新的
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(storeValue) object:nil];
if(!slider.tracking)
{
[self performSelector:@selector(storeValue) withObject:nil afterDelay:0.5];
}
(或者,如果您发现有任何性能问题,可以显式存储是否安排了保存,但除非您必须这样做,否则不要将其过度复杂化)如果您能提供一个示例项目来演示问题,这可能会有所帮助。Github是一个很好的地方来做这件事……是的,我不太明白。他们移动滑块,但您想覆盖用户的移动?记录的值与用户停止触摸屏幕时拇指的位置相对应。但是,拇指仍在移动用于移动(一些惯性动画),因此在执行设置值(getValue)时它会移回正确的位置如果您可以提供一个示例项目来演示问题,可能会有所帮助。Github是一个很好的地方,可以这样做…是的,我不太明白。他们移动滑块,但您想覆盖用户的移动?记录的值与用户停止触摸滑块时拇指的位置相对应屏幕。但是,拇指继续移动(一些惯性动画),所以当你做一个设定值(getValue)时,它会移回正确的位置感谢我认为我可以从中获得灵感,它朝着正确的方向前进感谢我认为我可以从中获得灵感,它朝着正确的方向前进