2011-09-07 2 views
1

나는 여러 가지 카드와 같은보기에서 UIPanGestureRecognizer을 사용하여 사용자가 화면에서보기를 이동하도록합니다. 한 번에 3 개의 손가락과 3 개의 카드를 내려 놓을 수는 있지만, 내 기능 중 일부는 그렇게 작동하도록 설계되지 않았습니다.동시 UIGestureRecognizers를 방지하는 방법

제스처 인식기를 한 번에 하나씩 만 실행하고 싶습니다. 이를 위해 선호되는 방법이 있습니까?

  • gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:을하지만 이미 기본적으로 'NO'를 반환

    은 내가 생각했습니다.

  • 첫 번째 제스처가 시작될 때 인스턴스 변수를 설정하지만이 변수에 대한 다중 스레드 액세스가 걱정됩니다 (@synchronized을 사용해야합니까, 아니면 오버 헤드가 너무 많습니까?).
  • 제스처 인식기의 배열을 유지하고 gestureRecognizerShouldBegin에서 상태를 확인하십시오. 아무 것도 진행되지 않도록하십시오.

감사합니다.

+0

글로벌 제스처 인식기를 하나 추가하고 어떤 이미지가 탭되었는지 확인하십시오. – Nekto

답변

2

가장 좋은 방법은 어떤 카드를 터치했는지 판단하기 위해 카드의 수퍼 뷰인 하나의 (전체적인) 제스처 인식기를 hitTest:과 함께 사용하는 것입니다. 여러 번 터치하여 올바르게 작업 할 수 있습니다.

1

모든 UIPanGestureRecognizer를 모든 카드의 공통 수퍼 뷰에두고 제스처가 시작될 때 해당 카드를 찾으려면 검색을 수행하십시오. 그렇게하면 1 개의 제스처 인식기 만 있으므로 한 번에 하나의 제스처 만 실행할 수 있습니다.

을 수정하십시오. BTW, 서투른 상태로 유지하려는 아이디어는 어색하지만 효과적입니다. UIGestureRecognizer는 UIKit의 일부이며 기본 스레드에서만 작동하므로 다중 스레드 액세스에 대해 걱정할 필요가 없습니다. 하지만 내가 말한 것처럼, 그것은 서툴 렀다. 대신 하나의 "마스터"UIGestureRecognizer를 사용하면 더 깨끗합니다.

+0

내 아이디어에 대해 응답 해 주셔서 감사합니다. 서툰 것이기 때문에 동의합니다. 그래서 superview 솔루션을 사용할 것입니다. – brianpartridge

관련 문제