2011-02-07 42 views
1

我正在嘗試爲我爲iPhone開發的繪圖應用程序實現掌託拒絕功能,並注意到觸摸事件中存在一些奇怪的行爲。當我將手掌放在屏幕上並不斷擡起手中的某個區域,然後再將其降低時,我會獲得大量touchBegin事件,但只有幾個touchEnd事件。有什麼我不知道iOS的觸摸處理機制? 不應該是屬於每個UITouch對象的touchEnd和touchBegin事件的數量是否相等?在iPhone上缺少touchEnd事件

我的窗口只有一個視圖,它佔據了整個屏幕。視圖和窗口都啓用了多點觸控。我通過在touchBegin和touchEnd方法的開始處使用NSLog's來打印觸摸次數來計數事件。所以我考慮到一個事件可能包含有關多個觸摸的信息。

+0

歡迎來到StackOverflow。我對你的措辭感到困惑:「不應該是屬於每個UITouch對象的touchEnd和touchBegin事件的數量相等嗎?」。你介意改寫它嗎? – Moshe 2011-02-07 22:34:00

+0

讓我再說一遍:據我所知,除非觸摸被操作系統的某些中斷取消,在我得到觸摸的touchBegin事件後,我應該在某個時刻爲它獲取相應的touchEnd事件。 – sct 2011-02-08 06:34:24

回答

3

不要忘記爲touchesCancelled事件提供處理程序。在touchesBegan並且沒有匹配touchesEnded事件後,您可以獲得touchesCancelled調用。

+0

我要試試這個。我之前沒有考慮過這個問題,因爲我提到的行爲無論電話會議或類似的事情都會中斷。 – sct 2011-02-08 06:30:23

1

而不是望着touchesBegan:withEvent:touchesEnded:withEvent:呼叫的數量,你應該看看傳遞給這些方法的UITouchNSSet對象。舉例來說,如果您放置一根手指,然後在屏幕上放置另一隻手指,您將得到兩個touchesBegan:withEvent:電話。如果您同時從屏幕上擡起兩根手指,您將得到一個touchesEnded:withEvent:呼叫; UITouchUITouch傳入的物體將指示兩個手指已擡起。