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:更為簡單,并且仍然提供足夠的選項來調整應用程序中的事件處理。

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 將成為熱門測試視圖
- 3 回答
- 0 關注
- 748 瀏覽
添加回答
舉報