Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS UISlider如何强制值和拇指位置之间的同步?_Ios_Uislider - Fatal编程技术网

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

iOS UISlider如何强制值和拇指位置之间的同步?,ios,uislider,Ios,Uislider,我正在使用一个定制的UISlider。我使用slider.value保存用户输入后的值。过了一会儿,我需要使用[slider setValue:savedValue]将幻灯片的位置恢复到其保存的值 但是我注意到保存时间的位置和恢复后的位置之间存在一些差异 过了一段时间,我发现如果用户移动拇指的速度非常快,它会超过实际值(某种动量/惯性效应)。如何确保一个值对应一个拇指位置 谢谢您是否将该值视为整数? 由于它(UISlider对象)存储浮点,因此将其视为整数可能会导致此行为。。 也许在您处理更改的

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

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

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


谢谢

您是否将该值视为整数? 由于它(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)时,它会移回正确的位置感谢我认为我可以从中获得灵感,它朝着正确的方向前进感谢我认为我可以从中获得灵感,它朝着正确的方向前进