2013-08-27 2 views
1

서브 뷰가있는 UIScrollViewUITapGestureRecognizer이 있습니다.UITapGestureRecognizer에서 어떤보기를 터치했는지 확인하는 방법은 무엇입니까?

나는이 같은 인식을 만듭니다

UITapGestureRecognizer *tgr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureRecognized:)]; 
[self addGestureRecognizer:tgr]; 

사용자가 다른보기를 만진 경우에도 스크롤 뷰 자체에 UITapGestureRecognizer 포인트의보기 속성입니다. 터치가 스크롤 뷰에서 직접 내려 갔는지 여부를 알아야합니다.

+0

코드 스 니펫에 포함 된 자체는 무엇인가요? scrollView? 일반적으로 [self.whateverViewAspect addGestureRecognizer :]를 사용하면 뷰의 일부에 제스처 인식기를 특별히 추가 할 수 있습니다. –

+0

별도의 UIView 객체 위에 스크롤 뷰를 설정해보십시오. [viewWtihSCrollviewOnTopOf addSubview : scrollView]처럼; [viewWtihSCrollviewOnTopOf addGestureRecognizer : tgr]; – user2277872

답변

1

당신이 중 하나를 서브 클래스 UITapGestureRecognizer되고이

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    /* 
    * If you wanted you could store a set of all the views to allow 
    * for multiple touches 
    */ 
    self.touchedView = [touches.anyObject view]; 
    [super touchesBegan:touches withEvent:event]; 
} 

같은 touchesBegan:withEvent: 방법 뭔가를 재정 의하여이 정보를 보유 할 새 바르를 추가 할 수 있습니다 또는 당신은 당신이 UITapGestureRecognizer의 대표가되고 탭보기를 저장할 수 좋아하는 경우 클래스의 속성으로 구현하십시오. gestureRecognizer:shouldReceiveTouch:

2

폴의 제안은 훌륭하지만 인식 자의 대리인이되기를 원하지 않는다면 다른 방법이 있습니다.

제스처 인식기에 locationInView:을 요청한 다음 scrollView의 hitTest:withEvent: 메서드 (UIView에 정의 됨)를 사용하여 해당 포인트가 맨 위에있는 뷰를 검색 할 수 있습니다. 다음과 같음 :

CGPoint location = [recognizer locationInView:scrollView]; 
UIView *touchedView = [scrollView hitTest:location withEvent:nil]; 
관련 문제