2014-04-01 5 views
2

단일보기 iPhone 응용 프로그램에서 나는 다음 구조를 가지고 있습니다 : scrollView -> contentView -> imageView 그리고 아래 (주보기에서)에는 7 개의 드래그 가능한 사용자 정의보기가 있습니다 - 이는 contenView으로 끌 수 있습니다.기본보기에서 toegches 처리 - 터치 된 하위보기를 얻는 방법?

초기 드래그는 사용자 정의보기 ([email protected] 참조)에서 처리되었으며 정상적으로 작동하는 동안 기본보기로 알림을 보내야했습니다.

그래서 touchesBegan과 친구들을 메인 앱보기 (ViewController.m 참조)로 이동하려고합니다.

내 문제는 다음과 같습니다

가 처음에 내가 (GameBoard.m 참조) contentView에이 코드를했다 scrollView에서 끌어 하위 뷰를 사용하려면 다음

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    UIView* result = [super hitTest:point withEvent:event]; 

    return result == self ? nil : result; 
} 

을하지만 타일을 드래그 할 때 뒤쪽에서 contentView을 주보기에 추가하면 (아래 스크린 샷에 표시된 방향으로) 기본보기에 touchesBegan이 전달되지 않습니다. (내가 디버거에서 볼 수) 이제 touchesBegan 기본보기에서 호출됩니다

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    UIView* result = [super hitTest:point withEvent:event]; 

    return result == self ? nil : self.window.rootViewController.view; 
} 

: app screenshot

그래서 내가 대신 타일의 기본보기를 반환하는이 방법을 변경 한 그러나 touches.view도 주 화면을 가리키고 있습니다.

내 질문은 :

어떻게 새로운 touchesBegan 방법에 감동 타일을 찾는 방법은?

답변

2

신경 쓰지 마, 내 문제를 해결했습니다.

ViewController.m에서 나는 _draggedTile 바르를 추가 한과 감동 타일 찾으려면 다음 방법을 사용하여 touchesBegan에서 설정 : 처음에 (

- (SmallTile*) findTileAtPoint:(CGPoint)point withEvent:(UIEvent*)event 
{ 
    NSArray* children = [self.view.subviews arrayByAddingObjectsFromArray:_contentView.subviews]; 

    for (UIView* child in children) { 
     CGPoint localPoint = [child convertPoint:point fromView:self.view]; 

     if ([child isKindOfClass:[SmallTile class]] && 
      [child pointInside:localPoint withEvent:event]) { 
      return (SmallTile*)child; 
     } 
    } 

    return nil; 
} 

와의 touchedMoved, touchesEnded, touchesCancelled 난 그냥 그 바르를 사용을 나는 위의 findTileAtPoint:withEvent: 메서드를 사용하고 있었지만 가끔은 터치가 드래그 된 타일 위에 정확하게 있지 않을 것이고 이동은 불규칙하거나 취소되었습니다.)