我有一个0到100之间的滑块。我可以在模拟器中轻松停止任何数字,但在我的设备上滑块变得有点跳跃,当你松开手指时可能会移动一到两个滴答。我想让我的滑块像iPod中的多速滑块一样,但我找不到UISlider的“预包装版本”。一旦我抓住滑块的拇指,我似乎无法捕捉触摸的y坐标。或者这可能是敏感问题。任何帮助将非常感激。 感谢
答案 0 :(得分:1)
如果我明白你的意思,你似乎希望拇指以不同的速度移动,触摸的相对y位置。我没有使用过洗涤器控件。
UISlider控件继承自UIResponder,因此您可以将其子类化并添加自己的
– touchesBegan:withEvent:
– touchesMoved:withEvent:
– touchesEnded:withEvent:
touchesMoved会引起特别的兴趣,因为它会给你y坐标。不要忘记致电super
并将事件传递给响应者链。
如果你仍然没有发生任何事件 - 也许拇指在前面并且正在拦截它们。在滑块上放置一个常规的透明UIView子类,拦截触摸并在那里获取坐标,然后再将事件传递到链中。
我曾经使用过这段代码:
int progressAsInt = ((int)((completionSlider.value + 2.5f) / 5.0f) * 5);
[sender setValue:progressAsInt animated:YES];
在滑块的动作函数中,使UISlider仅将其拇指设置为离散值,就像带有制动器的音量控制一样。您可以使用由检测到的触摸的y位置决定的不同值来改变您允许的粒度,或者影响实际触摸事件所代表的移动量。
答案 1 :(得分:0)
我会编写自己的UISlider子类并自己实现所有触摸处理(即在hitTest:withEvent:,return [self pointInside:point withEvent:event] ? self : nil;
,使用UISlider进行渲染(您可以通过以下方式获取相关的最小/最大值)调用thumbRectForValue:或者调用它的任何东西。
我不确定你的意思是“我似乎无法捕捉触摸的y坐标”,但是一旦子视图“捕获”它就不能(轻松)访问触摸事件。一个黑客是自己处理所有触摸,但然后转发touchesBegan / Moved / Ended / Cancelled。