2011-11-28 5 views
0

터치 초기 위치가 UIView 하위 클래스의 아래 (A 아래)에있을 때 UIView 하위 클래스에 연결된 UIPanGestureRecognizer를 트리거하려고합니다. I는 다음과 같은 상황을 가지고뷰에서 해당 하위 뷰 중 하나에 터치 이벤트 넘겨 받기

/-------------------/ 
| B     | 
|   /---/ | 
|   | A | | 
|   /---/ | 
|  C   | 
|     | 
/-------------------/ 

A는, B는, (A)의 수퍼 인 첨부 팬 제스처 인식을 가지고있는 UIView이고, C는 접촉의 초기 위치이다. 그런 다음 터치가 A로 이동 한 다음 A가 제스처를 인식하고 콜백 기능을 트리거하기 위해 터치 처리 및 팬 인식기를 대신 처리하기를 원합니다.

나는 B가 초기 hitTest :에 의해 반환된다는 것을 알고 있었기 때문에 touchesBegan/Moved/Ended/Changed : 터치 처리를 트리거 할 것이다.

터치의 제스처 인식기가이 터치 처리를 "인계 받도록"만들 수 있습니까? 또는 최소한 제스처를 인식 할 수 있도록 터치를 수신합니까?

목표는 A와 같이 여러 개의 하위보기가있는 상황에서 동시에 여러 접촉을 추적 할 때이 작업을 수행하여 터치가 이들 중 누구에게 "전달"될 수 있도록하는 것입니다.

이 문제를 해결하는 방법에 대한 아이디어는 크게 감사하겠습니다.

답변

0

당신이 찾고있는 것만 큼 깨끗하지는 않을지 모르지만 내가 원하는대로 할 수있는 가장 좋은 방법은 제스처 인식기를 슈퍼 뷰 "B"에 추가 한 다음 "B "하위 뷰를 반복하여 제스처가 특정 하위 뷰 내부에 있는지 확인한 다음 해당 하위 뷰로 메시지를 보내 원하는 작업을 수행 할 수 있습니다.

+0

입력 해 주셔서 감사합니다. 당신이 제안하는 방식이 가장 직접적인 방법이라고 생각합니다. 나는 touchesBegan/Moved/EndedCancelled : superview "B"의 기능을 무시하면서이 작업을 시도 할 것입니다. 이렇게하면 여러 팬 동작을 동시에 추적 할 수 있다고 생각합니다. 그렇지 않으면 몇 가지 PanGestrureRecognizers가 필요합니다. – Jonas

+0

당신은 몇 가지 제스처가 필요할 것이며, 당신이 요구하는 것을 할 수 있다는 것도 확신하지 못합니다. 나는 이것에 대해 100 % 확신하지는 않지만 "B"에서 "A"로 손가락을 끌면 "touch"는 여전히 "B"에 의해 소유되고 "A"에서는 "B"로 인식되지 않을 것이라고 생각합니다. 몸짓. 제스처 인식기를 사용할 수도 있지만 서브 뷰가 아닌 "B"에 추가하는 것이 좋습니다. 제스처 인식기를 사용하는 것은 저레벨 터치 루틴보다 약간 쉽습니다. – Ron

+0

"B"에 첨부 된 제스처 인식기로 작업하고 있습니다. 낮은 수준의 터치 루틴보다 쉽기 때문에 제안을 시도했습니다. 이 방법을 사용할 때마다 'A'보기 중 하나만 이동할 수 있습니다. 즉, 'B'에 연결된 단일 제스처 인식기가 한 번만 (예상대로) 실행됩니다. 제스처는 B가 소유하고 있지만 "A"뷰의 첫 번째 항목에서 "B"의 인스턴스 변수로 해당 뷰에 대한 포인터를 저장하기 때문에 "A"가 발견 될 때까지 테스트를 수행하면됩니다. 팬 제스쳐가 끝날 때까지 나는 그걸 붙잡는다. – Jonas

관련 문제