Mój problem: mam nadzór, EditViewktóry zajmuje w zasadzie całą ramkę aplikacji i podwidok, MenuViewktóry zajmuje tylko dolne ~ 20%, a następnie MenuViewzawiera własny podwidok, ButtonViewktóry faktycznie znajduje się poza MenuViewgranicami aplikacji (coś takiego:) ButtonView.frame.origin.y = -100.
(uwaga: EditViewma inne widoki podrzędne, które nie są częścią MenuViewhierarchii widoków, ale mogą wpływać na odpowiedź).
Prawdopodobnie już znasz ten problem: kiedy ButtonViewznajduje się w granicach MenuView(a dokładniej, kiedy moje dotknięcia są w MenuViewgranicach), ButtonViewreaguje na zdarzenia dotykowe. Kiedy moje dotknięcia są poza MenuViewjego granicami (ale nadal w ButtonViewgranicach), żadne zdarzenie dotykowe nie jest odbierane przez ButtonView.
Przykład:
- (E) jest
EditViewrodzicem wszystkich poglądów - (M) jest
MenuViewpodziałem widoku EditView - (B) jest
ButtonViewpodziałem widoku MenuView
Diagram:
+------------------------------+
|E |
| |
| |
| |
| |
|+-----+ |
||B | |
|+-----+ |
|+----------------------------+|
||M ||
|| ||
|+----------------------------+|
+------------------------------+
Ponieważ (B) jest poza ramką (M), dotknięcie w regionie (B) nigdy nie zostanie wysłane do (M) - w rzeczywistości (M) nigdy nie analizuje dotyku w tym przypadku, a dotknięcie jest wysyłane do następny obiekt w hierarchii.
Cel: Rozumiem, że nadpisywanie hitTest:withEvent:może rozwiązać ten problem, ale nie rozumiem dokładnie, jak. W moim przypadku powinno hitTest:withEvent:być nadpisane w EditView(mój nadzór „nadrzędny”)? A może powinno zostać pominięte w MenuViewbezpośrednim nadzorze nad przyciskiem, który nie jest dotknięty? A może źle o tym myślę?
Jeśli wymaga to długiego wyjaśnienia, pomocne byłoby dobre źródło informacji online - z wyjątkiem dokumentów Apple UIView, które nie wyjaśniły mi tego jasno.
Dzięki!