2012-07-15 78 views
1

這個問題很簡單,但非常複雜:在UIResponder中有4種處理觸摸的方法。檢測觸摸是否停在屏幕上

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

如何檢測是否觸摸屏幕上停止?

問題是,我必須檢測是否有東西在固定觸摸下移動(未取消或結束,它只是不動)並且因爲它不移動,所以這些方法都不會被調用。

我的想法是這樣的:

我可以在觸摸添加到NSMutableArray但後來我不得不更新它的任何觸摸移動(這是很多)。這也造成了更多的問題,我需要檢測哪些觸摸停止了,是否結束。因爲我從UIResponder得到NSSet,我沒有一個有組織的數組,所以......各種問題。

我在等待想法。

回答

1

我固定it..and也發現了一些真正酷的UITouch

我做了什麼:在

– touchesCancelled:withEvent: 
[touchesSet removeAllObjects]; 

– 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]; } 

幹這個我在屏幕上的所有觸摸的NSSet在任何給定的時間,與位置和UITouchPhase

0

這個解決方案很少取決於你想要做什麼(並且你沒有真正描述你要做什麼業務問題或用戶體驗)。但假設你只是試圖檢測連續手勢何時暫停但尚未完成:

您可以讓touchesMoved跟蹤上次調用的位置和時間。例如。如果你有一個子類手勢識別器,給它一個屬性CGPoint lastLocation或類似你可以查詢的東西。

然後,您可以設置一個NSTimer,稍後會觸發一段時間,這將測試您的「停止」狀況。例如。如果您的NSTimer每0.1秒調用一次,並且您等待1秒鐘沒有發生位置變化,那麼這將符合停止條件。

如果您正在查看「是否有東西在固定觸摸下移動」,您可以將它添加到您的NSTimer例程中。

+0

我看不出它如何依賴於用戶交互。我只想看看觸摸是否停止。其餘無關緊要。至於你的想法,這正是我所說的..只是我將它們添加到一個數組...然後檢查該數組...你建議基本上是添加一個NSTimed的頂部。也有問題,我不能檢查一個接觸單獨(即我不知道哪個是哪個)..所以,即使我有一個計時器,我將無法確定哪些停止...我只知道有些觸摸停止了......不是那個在x上的那個:y:...做到了。 – skytz 2012-07-15 19:05:46

+0

@skytz我一定不明白你的問題。我以爲你問的是如何檢測用戶何時處於某種姿態,但停止/暫停,但我推測你不想等待未來的某個「touchesMoved」,「touchedEnded」或「touchesCledlled」以檢測用戶在手勢中間何時停止/暫停。如果你不使用某些NSTimer或類似的東西,我不知道你會如何知道用戶停止了手勢,但他們的手指保持在屏幕上。 – Rob 2012-07-15 19:30:59