亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

iOS的事件處理-hitTest:withEvent:和pointInside:withEvent:

iOS的事件處理-hitTest:withEvent:和pointInside:withEvent:

iOS
HUX布斯 2019-10-14 10:13:51
盡管大多數Apple文檔都寫得很好,但我認為“ iOS事件處理指南 ”是一個例外。我很難清楚地了解那里的描述。該文件說,在命中測試中,一個窗口調用hitTest:withEvent:視圖層次結構的最頂層視圖。此方法通過遞歸地調用pointInside:withEvent:返回YES的視圖層次結構中的每個視圖來進行,然后繼續進行下去,直到找到發生觸摸的子視圖。該視圖將成為命中測試視圖。難道就好像系統只hitTest:withEvent:調用了最頂層的視圖,即調用pointInside:withEvent:了所有子視圖,并且如果特定子視圖的返回值為YES,則pointInside:withEvent:該子視圖的子類的調用一樣?
查看完整描述

3 回答

?
胡說叔叔

TA貢獻1804條經驗 獲得超8個贊

這似乎是一個基本的問題。但是,我同意您的要求,該文檔不像其他文檔那么清晰,所以這是我的答案。


hitTest:withEvent:UIResponder中的實現執行以下操作:


它調用pointInside:withEvent:的self

如果返回為NO,則hitTest:withEvent:返回nil。故事的結尾。

如果返回值為“是”,則它將hitTest:withEvent:消息發送到其子視圖。它從頂層子視圖開始,然后繼續其他視圖,直到子視圖返回非nil對象,或者所有子視圖都收到消息。

如果子視圖nil第一次返回非對象,則第一個hitTest:withEvent:返回該對象。故事的結尾。

如果沒有子視圖返回非nil對象,則第一個hitTest:withEvent:返回self

此過程以遞歸方式重復,因此通常最終返回視圖層次結構的葉視圖。


但是,您可能會覆蓋hitTest:withEvent以執行其他操作。在許多情況下,覆蓋pointInside:withEvent:更為簡單,并且仍然提供足夠的選項來調整應用程序中的事件處理。


查看完整回答
反對 回復 2019-10-14
?
森林海

TA貢獻2011條經驗 獲得超2個贊

我認為您在將子類與視圖層次結構混淆。該文檔說的如下。假設您具有此視圖層次結構。通過層次結構,我不是在談論類層次結構,而是在視圖層次結構中的視圖,如下所示:


+----------------------------+

|A                           |

|+--------+   +------------+ |

||B       |   |C           | |

||        |   |+----------+| |

|+--------+   ||D         || |

|             |+----------+| |

|             +------------+ |

+----------------------------+

假設您將手指放在里面D。將會發生以下情況:


hitTest:withEvent:A在視圖層次結構的最頂層視圖上調用。

pointInside:withEvent: 在每個視圖上遞歸調用。

pointInside:withEvent:被調用A,并返回YES

pointInside:withEvent:被調用B,并返回NO

pointInside:withEvent:被調用C,并返回YES

pointInside:withEvent:被調用D,并返回YES

在返回的視圖上YES,它將向下查看層次結構以查看發生觸摸的子視圖。在這種情況下,從A,C并且D,這將是D。

D 將成為熱門測試視圖


查看完整回答
反對 回復 2019-10-14
  • 3 回答
  • 0 關注
  • 748 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號