Mój problem: mam nadzór, EditView
który zajmuje w zasadzie całą ramkę aplikacji i podwidok, MenuView
który zajmuje tylko dolne ~ 20%, a następnie MenuView
zawiera własny podwidok, ButtonView
który faktycznie znajduje się poza MenuView
granicami aplikacji (coś takiego:) ButtonView.frame.origin.y = -100
.
(uwaga: EditView
ma inne widoki podrzędne, które nie są częścią MenuView
hierarchii widoków, ale mogą wpływać na odpowiedź).
Prawdopodobnie już znasz ten problem: kiedy ButtonView
znajduje się w granicach MenuView
(a dokładniej, kiedy moje dotknięcia są w MenuView
granicach), ButtonView
reaguje na zdarzenia dotykowe. Kiedy moje dotknięcia są poza MenuView
jego granicami (ale nadal w ButtonView
granicach), żadne zdarzenie dotykowe nie jest odbierane przez ButtonView
.
Przykład:
- (E) jest
EditView
rodzicem wszystkich poglądów - (M) jest
MenuView
podziałem widoku EditView - (B) jest
ButtonView
podział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 MenuView
bezpoś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!