2011-09-07 72 views
1

我在幾張卡片式視圖上使用UIPanGestureRecognizer,以讓用戶移動屏幕周圍的視圖。他們可以一次放下3根手指和3張卡,這是非常好的,然而,我的一些功能並不是按照這種方式工作的。如何防止同時使用UIGestureRecognizers

我想只允許1個手勢識別器一次運行。有沒有一種首選的方法來做到這一點?

我認爲:

  • gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:但它已經默認返回 'NO'。
  • 當第一個手勢開始時設置實例變量,但我擔心對此變量的多線程訪問(我應該使用@synchronized,還是會花費太多開銷?)。
  • 保持手勢識別器的數組並檢查其在gestureRecognizerShouldBegin中的狀態:確保沒有任何進行中。

謝謝。

+0

添加一個全局手勢識別器並檢查點擊了哪個圖像。 – Nekto

回答

2

最佳做法是使用一個(全局)手勢識別器來查看您的卡片的超級視圖,使用hitTest:來確定哪張卡片已被觸摸。它將允許您正確使用多個觸摸。

1

將一個UIPanGestureRecognizer放在所有牌的公共超級視圖上,然後在手勢開始時執行檢測以找到有問題的牌。這樣你只有一個手勢識別器,所以一次只能運行一個手勢。

編輯:順便說一句,你保留伊娃的想法雖然笨拙,但仍然有效。 UIGestureRecognizer是UIKit的一部分,只能在主線程上運行,所以您不必擔心多線程訪問。但就像我說的那樣,這很笨拙。使用一個「主」UIGestureRecognizer反而更清潔。

+0

感謝您回覆我的想法,我同意這將是笨拙的,所以我要與超級視圖解決方案。 – brianpartridge

相關問題