2011-09-24 5 views
1

touchesBegan으로 터치 이벤트를 감지하는 UIViewController가 있습니다. 화면 주위로 움직이는 UIImageView 객체가 움직이며 터치 이벤트가 그들 중 하나에 도착했는지 확인해야합니다. 내가 시도한 바 :터치 컨트롤러가 움직이는 UIImageView에 있는지 확인합니다.

UITouch* touch = [touches anyObject]; 

if ([arrayOfUIImageViewsOnScreen containsObject: [touch view]]) { 
    NSLog(@"UIImageView Touched!"); 
} 

그러나 이것은 결코 발생하지 않습니다. 또한 나는 이런 식으로 뭔가 수행하는 경우 : 내가 너무 명확 [touch view] 나에게있는 UIImageView를 포기하지 않을되면, UIImageViews의 원터치 경우에도,

int h = [touch view].bounds.size.height; 
NSLog([NSString stringWithFormat: @"%d", h]); 

이 전체의 UIViewController (화면)마다의 높이를 출력합니다. UIImageView 만 눌렀을 때 어떻게 감지합니까? UIButtons를 사용하여 제안하지 마십시오.

감사합니다.

답변

0

이 질문은 잊어 버렸습니다. 문제는 viewDidLoad가 UIImageView에서 userInteractionEnabled를 설정할 때까지 기다리지 않았다는 것이 었습니다.

0

나는 UIButtons를 사용하지 말 것을 권유하지만 버튼은 나에게 가장 좋고/쉬운 방법처럼 들린다.

0

메인보기의 CALayer에 터치 중 하나를 사용하여 hitTest 메시지를 보내보십시오. 사용자가 터치 한 서브 뷰 계층에서 가장 멀리있는 CALayer를 반환합니다.

그러면 터치 한 레이어가 UIImageView 중 하나의 레이어인지 테스트 한 다음 거기에서부터 진행할 수 있습니다.

이 코드는 UIGestureRecognizer에서 생성 된 포인트를 사용합니다.

CGPoint thePoint = [r locationInView:self.view]; 
thePoint = [self.view.layer convertPoint:thePoint toLayer:self.view.layer.superlayer]; 
selectedLayer = [self.view.layer hitTest:thePoint]; 
1

당신은 단지있는 UIImageView을 누를 때 감지하려면 클래스 확인 :

if (touch.view.class == [UIImageView class]) { 
    //do whatever 
} 
else { 
    //isnt a UIImageView so do whatever else 
} 

편집을 ----

당신은 사용할 수있는 userInteraction을 설정하지 않은 UIImageView 당신이?!

관련 문제