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

时间:2012-07-15 17:23:17

标签: objective-c ios cocoa-touch

问题很简单但非常复杂:在UIResponder中有4种处理触摸的方法。

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

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

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

我的想法是:

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

我在等待想法。

2 个答案:

答案 0 :(得分: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

in

- touchesEnded:withEvent:

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

in

– touchesCancelled:withEvent:
[touchesSet removeAllObjects];

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

答案 1 :(得分:0)

解决方案取决于您尝试做的事情(并且您没有真正描述您正在寻找的业务问题或用户体验)。但假设您只是试图检测连续手势何时暂停但尚未完成:

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

然后,您可以设置一个NSTimer,该NSTimer将在稍后的某个时间内触发,这将测试您的“已停止”状态。例如。如果您的NSTimer每0.1秒调用一次并且您等待的位置没有变化,例如1秒,那么这将符合停止条件。

如果您正在寻找“在固定触摸下移动的东西”,您可以将其添加到您的NSTimer例程中。