2014-02-06 102 views
1

我一直在摔跤與多點觸摸'手指跟蹤'幾個星期了。我的背景是硬件和嵌入式系統編程,所以我對微控制器編程以外的任何經驗都沒有經驗。我取得了一些成功,但只有當多個觸摸開始和完成在同一時間。我的項目是音頻硬件的手勢控制界面,所以我需要跟蹤每個觸摸以產生自定義手勢。在iPhone上跟蹤多個觸摸

這個例子顯示瞭如何提取[觸摸allObjects],以便單獨地處理它們每個觸摸(I排除的處理代碼,這是多餘的本示例)

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 

touchesArray = [touches allObjects]; //Array Declared in header to hold multiple touches. 

NSUInteger nNumTouches = [touchesArray count]; //Counts number of touches in Array 
UITouch *touch = [touches anyObject]; 
CGPoint ptTouch; 

for (int nTouch = 0; nTouch < nNumTouches; nTouch++) 
{ 
    touch = [touchesArray objectAtIndex:nTouch]; 
    ptTouch = [touch locationInView:self.view]; 
{ 

是否有一個更有效的方法跟蹤每次觸摸?我覺得我已經完成了我的編程知識。特別是在試圖操縱一個NSMutable數組無效。我也看到了,並沒有從這裏執行細節:https://developer.apple.com/library/ios/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/multitouch_background/multitouch_background.html#//apple_ref/doc/uid/TP40009541-CH5-SW9

這看起來很有趣的反應,但我無法得到它在環境中工作:

how to track multitouch events on iphone?

謝謝您時間,任何意見將不勝感激,

湯姆。

回答

0

與他們所有需要同時觸地/ up的問題是由於[touches allObjects]沒有給你任何給定時間在屏幕上的所有手指陣列,它給你一個數組所有匹配當前事件的觸摸(向下/移動/結束/取消)。

如果您想手動執行而不使用任何gesturecognizers,則可以通過訪問event.allTouches來獲得所有觸摸對象的完整陣列。這將給你一個完整的陣列,你可以管理觸摸在任何時候。

0

使用UIGestureRecognizer,例如UITapGestureRecognizerUIPanGestureRecognizer。它應該使您更輕鬆地處理在不同時間發生的多點觸摸和觸摸的處理。還有其他UIGestureRecognizer可用,你可能想看看獲得你想要的行爲。

1

接受的答案是正確的。但是,對於那些還沒有弄清楚如何實現這個想法的人,請參閱我的回答here

當調用touchesBegan::時,基本概念是將每個UITouch ID存儲在一個數組中,然後在touchesMoved::事件中將每個ID與屏幕上的觸摸進行比較。這樣,每個手指可以與一個對象配對,並在平移時跟蹤。