2012-03-20 3 views
7

저는 사용자 정의 UIView를 만들고 UITapGestureRecognizer를 추가하고 있습니다. 탭 제스처 용 핸들러가 있습니다. 그러나 동시에 나는 내 UIView가 touchesBegan을 듣기를 원합니다. & touchesEnded 메소드. gestureRecognizer : shouldReceiveTouch : 메소드도 구현했지만 touchesBegan/touchesEnded 메소드는 호출되지 않습니다. 어떤 단서? 내 사용자 정의 내부UITouch 이벤트를 UIGestureRecognizer와 함께 듣기

UIView의 내보기 컨트롤러 당신은 제스처 인식에 대한 NOcancelsTouchesInView (가능성 delaysTouchesBegandelaysTouchesEnded)를 설정해야

MyCustomView aCustomView = [[[MyCustomView alloc] init] autorelease]; 
       UIGestureRecognizer *myGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)]; 
[aCustomView addGestureRecognizer:myGestureRecognizer]; 
       [myGestureRecognizer release]; 
+0

나는 항상 touchesBegan는 마스터의 ViewController의 관점에 적용 생각했다. – CodaFi

답변

10

내부

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)iGestureRecognizer shouldReceiveTouch:(UITouch *)iTouch { 
    return YES; 
} 

. 제스처 인식기의 기본 동작은 해당 동작과 뷰 처리가 모두 거치지 않도록하는 것입니다. 이러한 설정을 통해 해당 동작을 미세하게 조정할 수 있습니다.

+0

나는 분명히 당신이 언급 한 행동을하고 싶었다. 나는 기본 설정을 사용하고 있지만, 아직 건드리지 방법은 여전히 ​​호출됩니다. 내 질문보기 : http://stackoverflow.com/questions/15869944/how-to-prioritize-gesture-recognizers-and-touches-in-a-uiview – johnbakers

+0

@RobNapier는 내 문제에 링크 된 cancelsTouchesInView를 삽입하지 못했습니다. https://stackoverflow.com/questions/46170876/random-crash-on-pickerview-didselect-cfrunloop-is-calling-out-to-a-source1-p?noredirect=1#comment79305779_46170876 – user2363025

0

앞에서 설명한 것처럼 UITapGestureRecognizer에서 cancelTouchesInView 속성을 NO으로 설정해야합니다. 애플 문서에서

: 제스처 인식은 제스처, 그들의보기에서 해당 제스처의 나머지 감각을 바인드 해제 을 인식

경우 cancelsTouchesInView-(그래서 윈도우를 제공하지 않습니다). 이 창은 (touchesCancelled : withEvent :) 메시지를 사용하여 이전에 전달 된 내용을 취소합니다. 제스처 인식기가 제스처를 인식하지 못하면 멀티 터치 시퀀스에서 이 모두 터치됩니다.

추가 읽기 : https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIGestureRecognizer_Class/