2016-10-15 113 views
-1

我有一個惱人的問題。我有一個子類UIViewController,並用正常的-(void)touchesBegan-(void)touchesMoved ...方法檢查觸摸事件。無論我嘗試什麼,他們只被要求第一次接觸,其他人則完全被忽略。我知道,這個問題已經解決了這裏:TouchesBegan只被調用一次

Why are UIViewController touchesBegan, touchesMoved & touchesEnded only being called when the first of two touches begins, moves or ends?

然而,該解決方案還沒有爲我工作。我在每個視圖上都設置了multipleTouchEnabledYES,並且我在每個子視圖上設置了userInteractionEnabledNO,但在我所分類的視圖控制器上設置了主視圖。

+0

爲什麼你沒有在_view_上實現'touches'方法? – matt

+0

@matt我已經嘗試通過創建另一個子類和一切,發生完全相同的事情:( –

+0

嗯,我向你保證,每個手指都有一個'touchesBegan' - 手指是一個觸摸。一個小型的項目併發布它?我會很高興看到它,並告訴你你做錯了什麼。有太多的方法來錯誤地配置這裏的東西。 – matt

回答

-1

謝謝@matt的想法。我嘗試了一個空的項目,並且這些方法仍然只被調用一次。然後我檢查了touches數組,可能它被多次觸摸(我在模擬器上)調用過一次。然後我檢查了event.allTouches和瞧,有兩個接觸。愚蠢的我在模擬器上試試這個,但也愚蠢的蘋果一次調用touchesBegantouches數組只包含一個元素。

+0

不,這裏沒有什麼「愚蠢的」,你只是不太明白觸摸是如何工作的,我已經在我的答案中解釋過了已經向你推薦了我在其他地方的完整解釋,希望對你有所幫助! – matt

1

我認爲這個問題僅僅是理解touches事件如何工作的一個問題。

觸摸是手指,手指是觸摸。觸摸有一種觀點 - 觸摸最初發生的視角 - 這是其一生的其餘觀點。手指的行爲作爲一系列觸摸事件發送到該視圖。

所以,現在假裝你只有一個視圖,並且在該視圖中實現了touches事件。然後每一個手指在屏幕上下降將請致電touchesBegan一次。但是如果手指1已經已經在手指2下來時在屏幕上向下,顯然手指1沒有開始現在;已經發生了。所以這個致電touchesBegan將包含在其touches集只有手指2,因爲那是剛剛開始的手指。如果手指1還處於下降狀態,則會在事件的之間觸發二次報告,但這不是觸摸事件,因此它不會在touches集合中。

+0

它可能會幫助你閱讀我的書:http://www.apeth.com/iOSBook/ch18.html – matt

+0

謝謝,我的問題是iOS模擬器ac因爲在同一時間開始,所以兩次同時觸摸僅調用一次touchBegan方法一次。 –

+0

是的,在模擬器上測試多個手指是一種高度人爲的運動,因爲它們是人造的手指。 :) – matt