2012-04-14 33 views
1

如下圖所示,我的應用程序有幾個UIViews,BCD,並排,並且所有包含在包封的UIView A檢測手勢上重疊的屏幕區域中的iOS5

enter image description here

我在B,CD的每一箇中都有UIPinchGestureRecognizer。我還想做的是在整個區域A(不妨礙其他手勢識別器工作)上識別不同的手勢。

這是最好的策略是什麼?我針對的是iOS5 +,無需向後兼容。

還值得注意的是,A的手勢識別器可能必須是自定義手勢識別器,因爲我想檢測一個捏,但涉及> 2個手指。

思想:

如果安裝了A手勢識別器無法正常工作,有可能通過使用touchesBegan等作爲UIResponder docs筆記做舊的方式,你可以有一個子類UIView只需撥打[super touchesBegan:touches withEvent:event]即可讓其在響應者鏈中傳遞,如果您對此觸摸不感興趣。

回答

0

事實證明,僅僅以簡單明瞭的方式添加手勢識別器就行得通,至少對於我想識別的手勢而言。我想它會更復雜。

0

像往常一樣將手勢識別添加到A.

現在您需要首先測試所碰到的東西。

首先您需要測試項目的z-index。例如,如果你觸摸B,那麼你的函數將對所有受影響的項目進行循環/命中測試,在這種情況下,A & B. 當你的函數檢測到兩個A碰撞測試時,應該檢查z-index。例如B的z-index是2,那麼z z-index是1.現在你知道B是用戶想要觸摸的東西,因爲它的z-index更高,這意味着它在頂部。

確定了目標(B)後,在執行GestureRecognize之前,您需要暫時禁用A的手勢識別以消除重疊的手勢識別之間的任何衝突。 B touch完成/結束後,啓用A的GestureRecognize回來。

+0

感謝您的回答。點擊測試哪些組件/代碼?使用哪種技術? (如touchesBegan等)? – occulus 2012-04-16 07:45:47

+0

我沒有可以發佈的代碼,但我會盡力解釋。 使用Touches作爲初始觸摸識別,並將GestureRecognizes用作識別組件內部觸摸的輔助處理程序。 初次觸摸打擊測試整個屏幕。循環遍歷所有元素,並找出它們中的哪些位於觸摸的座標中。所以如果你觸摸B,循環應該找到B和A,因爲二者都在接觸座標內。然後,您可以禁用/啓用衝突的GestureRecognizes,並在手勢完成後啓用它們。 – 2012-04-16 11:05:51