如何以恒定速率获得触摸位置?

时间:2011-01-28 16:45:51

标签: iphone cocoa-touch ipad touch

我正在为iPad写一个反应时间实验。 UIEvent / UITouch给了我一些事件,当主题在'touchMoved'周期中在屏幕上移动手指时,每秒约60次,但遗憾的是不是以恒定速率。当用户停止移动他的手指时,touchMoved甚至停止发射事件。我需要的是一种方法,以恒定的速率捕捉触摸位置,假设每20或40毫秒。

第二个问题是,触摸事件的时间戳有多准确?

3 个答案:

答案 0 :(得分:0)

当用户拖动手指时,无法获得每个触摸点。每次循环输入循环时,您只能获得触摸屏幕的触摸点。您必须“预测”用户触摸您未收到的积分的位置。

除此之外,我前一段时间遇到了同样的问题。 UIResponder Delays

答案 1 :(得分:0)

您可以设置NSTimer以特定间隔调用方法,例如storeTouches:

NSTimer *tUpdate;
NSTimeInterval tiCallRate = 1.0 / 60.0;
tUpdate = [NSTimer scheduledTimerWithTimeInterval:tiCallRate
                                           target:self
                                         selector:@selector(storeTouches:)
                                         userInfo:nil
                                          repeats:YES];

然后保留您自己当前接触点的记录。 当然,如果没有touchesEnded事件,也没有touchesMoved事件,那么你就会知道用户仍然在触摸与上次完全相同的位置。

答案 2 :(得分:0)

对于60 fps触摸录制(可能是当前iOS触摸传感器驱动程序允许的最大值),尝试在UI运行循环中尽可能少地执行,因为这可能会阻止触摸事件。检查每个触摸事件的时间戳。如果你有一个足够快的UI运行循环周期,并且在触摸移动之间有超过帧时间跳过,那么很可能在中间时间内没有触摸移动,所以只需填写丢失的数据(前面的x, y点)当前触摸更新之前。

时间戳似乎被重新量化为硬件60 fps帧速率,所以不要期望比这更准确。