2012-04-22 3 views
6

배경보기가 있고 보조보기로 여섯 개의 UIImageView이있는 앱을 만들고 있습니다. 나는 UITapGestureRecognizer이 있는데 UIImageView 중 하나가 켜져 있고 thie handleTap 메서드가 제스처 인식기가 호출하는 것을 볼 수 있습니다. 그러나 이것을 실행하면 hitTest:withEvent:은 imageView 중 하나를 탭해도 항상 배경보기를 반환합니다. hitTest를 호출하면 이벤트와 관련이 있습니까?hitTest : withEvent : Not Working

감사

- (void) handleTap: (UITapGestureRecognizer *) sender 
{ 
    if (sender.state == UIGestureRecognizerStateEnded) 
    { 
     CGPoint location = [sender locationInView: sender.view]; 
     UIView * viewHit = [sender.view hitTest:location withEvent:NULL]; 
     NSLog(@"%@", [viewHit class]); 
     if (viewHit == sender.view) {} 
     else if ([viewHit isKindOfClass:[UIImageView class]]) 
     { 
      [self imageViewTapped: viewHit]; 
      NSLog(@"ImageViewTapped!"); 
     } 
    } 
} 

답변

12

있는 UIImageView은 기본적으로 사용자 상호 작용을 등록하지 않도록 구성. 있는 UIImageView 문서에서

:

새로운 이미지 뷰 객체는 기본적으로 사용자 이벤트를 무시하도록 구성되어 있습니다. UIImageView의 사용자 지정 하위 클래스에서 이벤트를 처리하려면 개체 초기화 후 userInteractionEnabled 속성 값을 YES로 명시 적으로 변경해야합니다.

view.userInteractionEnabled = YES; 

이것은 다시 상호 작용을 설정하고 당신은 터치 이벤트를 등록 할 수 있어야한다 :

그래서, 당신은 귀하의 의견을 초기화 후 바로 당신이 있어야합니다.

+0

정말 고마워요! –

1

가 작동 (포함하는 뷰에 하나의 GR) 당신의 접근 방식에 재 작성은, 그러나 그것은 우리의 뇌 상처가 문제가 명확히 인 오른쪽 좌표 시스템을 점점 만들거야 게시 된 코드.

더 나은 대답은 각각의 UIImageViews에 N 제스처 인식기를 부착하는 것입니다. 그들은 모두 같은 타겟을 가지며 동일한 handleTap : 메소드를 사용할 수 있습니다. handleTap :이 같은 어떤 형상을 검색하지 않고보기를 얻을 수 있습니다 :

UIImageView *viewHit = (UIImageView *)sender.view; 
+0

프로젝트가 거의 완료되었고 프로젝트 전체가 주어진 코드 스 니펫을 사용하지만 어쩌면 나중에이 코드를 사용해 보겠습니다. 어쨌든 고마워. –