1

问题很简单但极其复杂:UIResponder有 4 种处理触摸的方法。

- touchesEnded:withEvent:event
– touchesBegan:withEvent:
– touchesMoved:withEvent:
– touchesCancelled:withEvent:

如何检测屏幕上的触摸是否停止?

问题是我必须检测是否有东西在静止的触摸下移动(没有取消或结束。它只是没有移动)并且因为它没有移动,所以这些方法都不会被调用。

我的想法是这样的:

我可以将触摸添加到 aNSMutableArray但我必须为任何触摸移动更新它(这很多)。这也会产生更多问题,我需要检测哪些触摸停止以及是否结束。而且因为我得到了NSSetfrom UIResponder,所以我没有一个有组织的数组,所以......各种问题。

我在等待想法。

4

2 回答 2

1

我修好了..还发现了一些很酷的东西UITouch

我做了什么:在

 – touchesBegan:withEvent:
for(UITouch*touch in touches){
[touchesSet addObject:touch]; } //touchesSet is a set that i store all the touches on the screen

- touchesEnded:withEvent:

for(UITouch*touch in touches){
[touchesSet removeObject:touch]; }

– touchesCancelled:withEvent:
[touchesSet removeAllObjects];

这样做我NSSet在任何给定时间都会在屏幕上进行所有触摸,包括位置和UITouchPhase

于 2012-07-17T18:40:44.670 回答
0

解决方案在一定程度上取决于您要做什么(并且您并没有真正描述您要解决的业务问题或用户体验)。但是假设您只是想检测一个连续手势何时暂停但尚未完成:

您可以touchesMoved跟踪上次调用它的位置和时间。例如,如果你有一个子类手势识别器,给它一个CGPoint lastLocation你可以查询的属性或类似的东西。

然后,您可以设置一个 NSTimer,它会在一定时间后触发,这将测试您的“停止”条件。例如,如果您的 NSTimer 每 0.1 秒调用一次,并且您正在等待位置没有变化,例如 1 秒,那么这将被视为停止条件。

如果您想查看“某物在静止触摸下是否移动”,您可以将其添加到您的 NSTimer 例程中。

于 2012-07-15T18:42:14.137 回答