Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.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
为iPhone编程变速滑块_Iphone - Fatal编程技术网

为iPhone编程变速滑块

为iPhone编程变速滑块,iphone,Iphone,我有一个值从0到100的滑块。我可以轻松地在模拟器中的任何数字上停止,但在我的设备上,滑块会有点跳动,当你松开手指时,滑块可能会移动一到两个刻度。我想让我的滑块像iPod中的多速洗涤器一样工作,但我找不到UISlider的“预包装版本”。一旦我抓住滑块的拇指,我似乎就无法捕捉到我触摸的y坐标。或者这是一个敏感的问题。任何帮助都将不胜感激。 谢谢我将编写自己的UISlider子类,并自己实现所有触摸处理(即在hitTest:withEvent:,中返回[self pointInside:point

我有一个值从0到100的滑块。我可以轻松地在模拟器中的任何数字上停止,但在我的设备上,滑块会有点跳动,当你松开手指时,滑块可能会移动一到两个刻度。我想让我的滑块像iPod中的多速洗涤器一样工作,但我找不到UISlider的“预包装版本”。一旦我抓住滑块的拇指,我似乎就无法捕捉到我触摸的y坐标。或者这是一个敏感的问题。任何帮助都将不胜感激。
谢谢

我将编写自己的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位置决定的不同值来改变允许的粒度,或影响实际触摸事件表示的移动量。

感谢您的帮助让我朝着正确的方向前进。