为iPhone编程变速滑块
我有一个值从0到100的滑块。我可以轻松地在模拟器中的任何数字上停止,但在我的设备上,滑块会有点跳动,当你松开手指时,滑块可能会移动一到两个刻度。我想让我的滑块像iPod中的多速洗涤器一样工作,但我找不到UISlider的“预包装版本”。一旦我抓住滑块的拇指,我似乎就无法捕捉到我触摸的y坐标。或者这是一个敏感的问题。任何帮助都将不胜感激。为iPhone编程变速滑块,iphone,Iphone,我有一个值从0到100的滑块。我可以轻松地在模拟器中的任何数字上停止,但在我的设备上,滑块会有点跳动,当你松开手指时,滑块可能会移动一到两个刻度。我想让我的滑块像iPod中的多速洗涤器一样工作,但我找不到UISlider的“预包装版本”。一旦我抓住滑块的拇指,我似乎就无法捕捉到我触摸的y坐标。或者这是一个敏感的问题。任何帮助都将不胜感激。 谢谢我将编写自己的UISlider子类,并自己实现所有触摸处理(即在hitTest:withEvent:,中返回[self pointInside:point
谢谢我将编写自己的UISlider子类,并自己实现所有触摸处理(即在hitTest:withEvent:,
中返回[self pointInside:point withEvent:event]?self:nil;
,使用UISlider只需进行渲染即可(您可以通过调用thumbRectForValue:或任何调用来获得相关的最小/最大矩形)
我不确定你所说的“我似乎无法捕获我的触摸的y坐标”是什么意思,但一旦子视图“捕获”了,就不可能(轻松)访问触摸事件它。一个技巧是自己处理所有触摸,然后向前触摸开始/移动/结束/取消。如果我理解你的意思,你似乎希望拇指随着触摸的相对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位置决定的不同值来改变允许的粒度,或影响实际触摸事件表示的移动量。感谢您的帮助让我朝着正确的方向前进。