我正在使用自定义 UISlider。我在用户输入后使用slider.value
. 过了一会儿,我需要将幻灯片的位置恢复到它保存的值,使用[slider setValue:savedValue]
.
但是我注意到保存时的位置和恢复后的位置之间存在一些差异。
过了一会儿,我发现如果用户快速移动拇指,它会比实际值走得更远(某种动量/惯性效应)。如何确保一个值对应一个拇指位置?
您是否将值视为整数?
因为它(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(...)
如果你也想留在浮动区域,你可以用函数来做......
假设您要UIControlEventTouchUpInside
口述“完成”,请UIControlEventEditingDidEnd
改用。
如果做不到这一点,您可以键值观察value
,在每次更改时取消未来保存,如果tracking
为假,则从现在开始安排新的 0.5 秒。例如
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(storeValue) object:nil];
if(!slider.tracking)
{
[self performSelector:@selector(storeValue) withObject:nil afterDelay:0.5];
}
(或者如果您发现任何性能问题,或者明确存储是否安排了保存,我猜,但除非您必须这样做,否则不要过于复杂)