This quote will answer your question about why it behaves like this:
. window , . hit-testing hitTest: withEvent: ; pointInside: withEvent: , YES, , subview, . -. ()
UITapInSubviewsView hitTest:
(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
NSEnumerator *reverseE = [self.subviews reverseObjectEnumerator];
UIView *iSubView;
while ((iSubView = [reverseE nextObject])) {
UIView *viewWasHit = [iSubView hitTest:[self convertPoint:point toView:iSubView] withEvent:event];
if(viewWasHit)
return viewWasHit;
}
return [super hitTest:point withEvent:event];
}
.
( S.O. , , ).