2015-01-13 86 views
2

問:有沒有辦法從上海華接收觸摸直接在它的子視圖(即觸動子視圖的邊界之外)?iOS設備上接收上海華的觸摸事件,在它的子視圖

我想避免授權(正式/非正式),NSNotification,代理或任何其他中介解決方案將觸摸事件從一個視圖轉發到另一個視圖。

+2

沒有其他辦法。閱讀有關UIResponderChain的理論。 – Tirth

+0

我讀過它,它並不直接說它不可能。它甚至表明這是返回pointInside的BOOL值的問題:withEvent :, quote:「如果傳入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

不幸的是,我發現了一個問題:有時不符合條件,但無條件返回YES修復它​​(?)。有什麼想法嗎? 我的UIView樹是:UIView A(root)> UIView B> UIView C> UIView D在同一節點上的SKView。只能從本身和UIView C接收SKView。 –

+0

@KrzysztofPrzygoda - 我認爲這是您的視圖層次結構中的一些問題,但我無法從您的評論中充分說出。我建議你嘗試記錄點和幀,找出導致它失敗的原因。另請參閱[事件傳遞]的蘋果指南(https://developer.apple.com/library/ios/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/event_delivery_responder_chain/event_delivery_responder_chain.html)以及[在smnh上寫的這篇漂亮的文章。我](http://smnh.me/hit-testing-in-ios/) – foundry

相關問題