2009-01-20 94 views
0

我已經多次關於在應用程序中調用事件方法的行爲的iPhone編程指南。事件的可可觸摸行爲

從指南所說: touchesBegan在手指首次觸摸屏幕時被調用。

touchesMoved當屏幕上的手指移動時調用。

touchesEnded在手指離開屏幕時被調用。

問題變得有點混濁用多個手指都參與:

即使設置爲NO的多點觸控交互標誌,應用程序繼續調用當前跟蹤另一觸摸視圖的的touchesBegan方法。這似乎對我來說很直觀。

這是正確的行爲嗎?我認爲新的UITouch(甚至添加到正在跟蹤的當前事件)不會觸發touchesBegan方法。

值得注意的是,我在IB中設置了這個標誌以及編程方式以確保我沒有錯過任何東西。

感謝, 科瑞

回答

0

我想通了,我的問題,但首先要澄清多點觸摸的正常功能:

如果您的視圖的multipleTouchEnabled標誌設置爲NO,該視圖的的touchesBegan方法應該不火,如果第二觸摸被施加到一個屏幕。

因此,我的問題的解決方案:

我的看法包含幾個子視圖。該視圖負責處理觸摸自身和子視圖。

當我的代碼運行不正常時,我有子視圖的userInteractionEnabled = YES。這意味着當子視圖被觸摸時,它會將觸摸轉發給超級視圖,無論超級視圖是否跟蹤另一觸摸。

換句話說,雖然UIApplication尊重視圖的multiTouchEnabled標誌,但響應者鏈中的其他視圖不會。

0

是的,我相信這是正確的行爲。您可以跟蹤每個觸摸事件的位置,所以我想你只需要構建你的邏輯,這樣你處理:

UITouch *touch = [[allTouches allObjects] objectAtIndex:0]; 

獲得第一觸摸和objectAtIndex:1第二。我認爲它會達到四五個(不確定,請參閱文檔)。

祝你好運!