我正在为iPad写一个反应时间实验。 UIEvent / UITouch给了我一些事件,当主题在'touchMoved'周期中在屏幕上移动手指时,每秒约60次,但遗憾的是不是以恒定速率。当用户停止移动他的手指时,touchMoved甚至停止发射事件。我需要的是一种方法,以恒定的速率捕捉触摸位置,假设每20或40毫秒。
第二个问题是,触摸事件的时间戳有多准确?
答案 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帧速率,所以不要期望比这更准确。