2015-01-13 3 views
2

질문 서브 뷰의에서 수퍼의 터치 이벤트를 수신 :그것은 서브 뷰의에서 수퍼 에서 직접을 접촉을받을 수있는 방법 (즉 서브 뷰의 경계의 외부 접촉)이 있습니까?아이폰 OS가

위탁 (공식/비공식), NSNotification, 프록시 또는 다른 중개 솔루션을 터치하여 이벤트를 전달하는 것을 피하고 싶습니다.

+2

다른 방법은 없습니다. UIResponderChain에 대한 이론을 읽으십시오. – Tirth

+0

나는 그것을 읽었으며 불가능을 직접 말하지 않는다. 심지어 BUT 값을 반환하는 문제를 제안합니다 : withEvent :, quote : "point가 hitTest : withEvent :로 전달되면 뷰의 경계 안에 있지 않으면 pointInside : withEvent : 메소드를 처음 호출하면 NO가 반환되고, 점은 무시되고 hitTest : withEvent : nil을 반환합니다. " –

답변

1

트릭을 수행합니다. 하위보기에서 pointInside을 재정의하십시오. 바라건대 당신의 요구 사항을 충족시킬 수 있기를 바랍니다.

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    point = [self convertPoint:point toCoordinateSpace:self.superview]; 
    CGRect frame = self.superview.frame; 
    if (CGRectContainsPoint(frame, point)) { 
     return YES; 
    } 
    return [super pointInside:point withEvent:event]; 
} 
+0

많은 의무가 있습니다! 이 메서드로 서브 클래 싱 된 SKView는 완벽하게 작동합니다. –

+0

불행히도, 나는 조건을 충족시키지 못했지만 무조건적으로 반환하는 경우 예 (^)를 수정했습니다. 이견있는 사람? 내 UIView 트리 : UIView (루트)> UIView B> UIView C> 동일한 노드의 SKView를 통해 UIView D. 자체 및 UIView C에서만 SKView에서 접촉을받습니다. –

+0

@KrzysztofPrzygoda - 뷰 계층 구조에 문제가 있다고 생각하지만 의견을 충분히 말할 수는 없습니다. 포인트 및 프레임을 로깅하여 어떤 조건으로 인해 실패하는지 확인하는 것이 좋습니다. 또한 [이벤트 전달] (https://developer.apple.com/library/ios/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/event_delivery_responder_chain/event_delivery_responder_chain.html)의 사과 안내서와 [이 훌륭한 글을 참고하십시오. me] (http://smnh.me/hit-testing-in-ios/) – foundry