当用户在视图上移动他的手指时,我需要得到每一个触点。
这就是我如何在我的CustomView.m中获得分数
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesMoved:touches withEvent:event];
UITouch *touch = [[touches allObjects] objectAtIndex:0];
CGPoint touchLocation = [touch locationInView:self];
NSLog(@"touch location is %f", touchLocation.x);
}然后我检查日志,输出是:
2016-05-23 19:49:45.116 AutoLayoutTest[32321:3809723] touch location is 6.000000
2016-05-23 19:49:45.134 AutoLayoutTest[32321:3809723] touch location is 10.500000
2016-05-23 19:49:45.151 AutoLayoutTest[32321:3809723] touch location is 17.500000
2016-05-23 19:49:45.169 AutoLayoutTest[32321:3809723] touch location is 29.000000
2016-05-23 19:49:45.185 AutoLayoutTest[32321:3809723] touch location is 41.500000
2016-05-23 19:49:45.202 AutoLayoutTest[32321:3809723] touch location is 52.000000
2016-05-23 19:49:45.220 AutoLayoutTest[32321:3809723] touch location is 62.500000
2016-05-23 19:49:45.237 AutoLayoutTest[32321:3809723] touch location is 68.500000
2016-05-23 19:49:45.254 AutoLayoutTest[32321:3809723] touch location is 77.000000
2016-05-23 19:49:45.272 AutoLayoutTest[32321:3809723] touch location is 84.500000
2016-05-23 19:49:45.288 AutoLayoutTest[32321:3809723] touch location is 90.000000
2016-05-23 19:49:45.305 AutoLayoutTest[32321:3809723] touch location is 96.000000
2016-05-23 19:49:45.322 AutoLayoutTest[32321:3809723] touch location is 100.500000
2016-05-23 19:49:45.339 AutoLayoutTest[32321:3809723] touch location is 105.500000
2016-05-23 19:49:45.357 AutoLayoutTest[32321:3809723] touch location is 109.500000
2016-05-23 19:49:45.374 AutoLayoutTest[32321:3809723] touch location is 116.000000
2016-05-23 19:49:45.391 AutoLayoutTest[32321:3809723] touch location is 121.000000
2016-05-23 19:49:45.409 AutoLayoutTest[32321:3809723] touch location is 127.000000
2016-05-23 19:49:45.426 AutoLayoutTest[32321:3809723] touch location is 132.500000
2016-05-23 19:49:45.443 AutoLayoutTest[32321:3809723] touch location is 138.500000
2016-05-23 19:49:45.460 AutoLayoutTest[32321:3809723] touch location is 145.000000
2016-05-23 19:49:45.478 AutoLayoutTest[32321:3809723] touch location is 151.000000
2016-05-23 19:49:45.495 AutoLayoutTest[32321:3809723] touch location is 156.000000
2016-05-23 19:49:45.512 AutoLayoutTest[32321:3809723] touch location is 161.500000
2016-05-23 19:49:45.529 AutoLayoutTest[32321:3809723] touch location is 166.500000
2016-05-23 19:49:45.546 AutoLayoutTest[32321:3809723] touch location is 173.000000
2016-05-23 19:49:45.563 AutoLayoutTest[32321:3809723] touch location is 178.500000
2016-05-23 19:49:45.580 AutoLayoutTest[32321:3809723] touch location is 183.500000
2016-05-23 19:49:45.597 AutoLayoutTest[32321:3809723] touch location is 189.000000
2016-05-23 19:49:45.614 AutoLayoutTest[32321:3809723] touch location is 194.000000
2016-05-23 19:49:45.632 AutoLayoutTest[32321:3809723] touch location is 199.500000
2016-05-23 19:49:45.649 AutoLayoutTest[32321:3809723] touch location is 204.000000
2016-05-23 19:49:45.666 AutoLayoutTest[32321:3809723] touch location is 209.500000
2016-05-23 19:49:45.683 AutoLayoutTest[32321:3809723] touch location is 214.500000
2016-05-23 19:49:45.700 AutoLayoutTest[32321:3809723] touch location is 220.000000
2016-05-23 19:49:45.717 AutoLayoutTest[32321:3809723] touch location is 224.000000
2016-05-23 19:49:45.735 AutoLayoutTest[32321:3809723] touch location is 229.000000
2016-05-23 19:49:45.752 AutoLayoutTest[32321:3809723] touch location is 233.500000
2016-05-23 19:49:45.769 AutoLayoutTest[32321:3809723] touch location is 237.500000
2016-05-23 19:49:45.786 AutoLayoutTest[32321:3809723] touch location is 240.500000
2016-05-23 19:49:45.803 AutoLayoutTest[32321:3809723] touch location is 244.000000
2016-05-23 19:49:45.821 AutoLayoutTest[32321:3809723] touch location is 247.000000
2016-05-23 19:49:45.838 AutoLayoutTest[32321:3809723] touch location is 249.000000
2016-05-23 19:49:45.855 AutoLayoutTest[32321:3809723] touch location is 251.000000
2016-05-23 19:49:45.872 AutoLayoutTest[32321:3809723] touch location is 252.000000
2016-05-23 19:49:45.889 AutoLayoutTest[32321:3809723] touch location is 254.000000
2016-05-23 19:49:45.907 AutoLayoutTest[32321:3809723] touch location is 255.000000
2016-05-23 19:49:45.925 AutoLayoutTest[32321:3809723] touch location is 256.000000
2016-05-23 19:49:45.955 AutoLayoutTest[32321:3809723] touch location is 256.500000
2016-05-23 19:49:46.056 AutoLayoutTest[32321:3809723] touch location is 257.500000
2016-05-23 19:49:46.073 AutoLayoutTest[32321:3809723] touch location is 258.500000
2016-05-23 19:49:46.090 AutoLayoutTest[32321:3809723] touch location is 260.500000
2016-05-23 19:49:46.108 AutoLayoutTest[32321:3809723] touch location is 261.500000
2016-05-23 19:49:46.125 AutoLayoutTest[32321:3809723] touch location is 262.500000
2016-05-23 19:49:46.142 AutoLayoutTest[32321:3809723] touch location is 263.500000
2016-05-23 19:49:46.159 AutoLayoutTest[32321:3809723] touch location is 264.500000
2016-05-23 19:49:46.191 AutoLayoutTest[32321:3809723] touch location is 265.000000
2016-05-23 19:49:46.268 AutoLayoutTest[32321:3809723] touch location is 265.500000
2016-05-23 19:49:46.293 AutoLayoutTest[32321:3809723] touch location is 266.500000
2016-05-23 19:49:46.317 AutoLayoutTest[32321:3809723] touch location is 267.000000
2016-05-23 19:49:46.334 AutoLayoutTest[32321:3809723] touch location is 268.000000
2016-05-23 19:49:46.355 AutoLayoutTest[32321:3809723] touch location is 269.000000
2016-05-23 19:49:46.387 AutoLayoutTest[32321:3809723] touch location is 269.500000
2016-05-23 19:49:46.412 AutoLayoutTest[32321:3809723] touch location is 270.000000
2016-05-23 19:49:46.443 AutoLayoutTest[32321:3809723] touch location is 271.000000
2016-05-23 19:49:46.488 AutoLayoutTest[32321:3809723] touch location is 272.000000
2016-05-23 19:49:46.544 AutoLayoutTest[32321:3809723] touch location is 272.500000
2016-05-23 19:49:46.598 AutoLayoutTest[32321:3809723] touch location is 273.500000
2016-05-23 19:49:46.624 AutoLayoutTest[32321:3809723] touch location is 274.000000请注意:打印的值仅为X轴的值。因为我只关心x轴的变化。
问题是,为什么有些地方没有被发现?我期望当用户在视图上拉手指时,捕获的点应该是6,7,8,9,10,11而不是6,10,17,29,41.
我非常肯定,当我在视图上拖动手指测试时,我以正常的速度完成了测试,这不是滑动。所以我不认为捕获的点应该是这样的。
我还试着从pan手势识别器中得到分数。结果是一样的。
我做错了吗?或者有什么更好的方法来做这件事?
发布于 2016-05-24 14:24:20
iPad屏幕的扫描频率为60赫兹。你所得到的触点坐标是手指在手指位置进行扫描时的位置。扫描本身是由400秒的电脉冲完成的,每一行数字化栅格的持续时间。
使用较新的iPads,这个频率高达120 Hz (iPad Air 2和2 mini),iPad Pro线甚至在240 Hz时扫描。您可以通过coalesced touches functionality获得这些中间点。下面是如何在objC中完成这一工作:
- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
for (UITouch *touch in touches) {
for (UITouch* coalescedTouch in [event coalescedTouchesForTouch:touch]) {
CGPoint newPoint = [coalescedTouch locationInView:self];
}
}
}如果手指移动足够快,即使是在坐标上也会有空隙。插值以获得手指处于中间位置的时间-屏幕不会给您更高的精度。
发布于 2016-05-23 12:04:07
是关于精确性的。您不能做任何事情,因为用户移动手指太快,无法获得每个像素的值。
https://stackoverflow.com/questions/37390358
复制相似问题