2013-02-18 82 views
3

我有一個在根層和2 CALayer子類組成的結構。這兩層也包含一層。CALayer hitTest與子層

這裏方案:

ROOT LAYER 
    | 
    |------- LAYER A 
    |   |---------BG 
    | 
    | 
    |--------LAYER B 
       |---------BG 

如果我要求它返回的最內層進入層次的ROOT LAYERhitTest方法。所以如果用戶點擊LAYER A,我會得到BGLAYER A

//In this example hitResult will contains the BG of LAYER A or the BG of LAYER B 
CALayer *hitResult = [rootLayer hitTest:point)]; 

我怎樣才能停止響應鏈,並直接從的HitTest得到LAYER ALAYER B發送到ROOT LAYER

+0

如果這些圖層是你自己的子類,那麼你可以重寫'hitTest:'並做你自己的事情。 – 2013-02-18 17:21:24

+0

@DavidRönnqvist我不明白。我怎樣才能停止與子類的傳播? – MatterGoal 2013-02-19 09:56:16

+1

從背景圖層返回「NO」 – 2013-02-19 10:38:31

回答

5

如果這些圖層是您自己的CALayer子類,那麼您可以覆蓋hitTest:containsPoint:在那裏執行您自己的邏輯。

覆蓋containsPoint:並在您的後臺圖層中返回NO將阻止它們從其超級層hitTest:實施中返回。

或者,您可以在層A和層B中覆蓋hitTest:,並且如果它們包含該點,則返回self