Для любого, кто сталкивается с этим вопросом, у меня есть решение для этого, хотя оно хорошо относится к территории "грязного взлома" и может порваться с более новыми (чем 3.0) выпусками iPhone OS ... использование на вашем подвергать опасности!
Я создал категорию UITabBar с реализацией hitTest:withEvent:
и заметил, когда я установил точку останова в теле этого метода, что значения x, y в предоставленной структуре CGPoint были довольно странными - при касании в ~ 15px или так что над панелью вкладок значения выглядят примерно так (x = 23.482749, y = 12.938475), тогда как при касании в панели вкладок значения были приятно округлены до ближайшего целого числа, например (х = 23, у = 12).
Теперь по какой-то причине я ожидал, что прикосновения в "зоне попадания" ~ 15px над панелью вкладок будут отрицательными для оси y (именно поэтому я начал с этого пути в первую очередь), но, увы, нет. Вы можете коснуться в двух разных местах и получить аналогичные координаты, как в примере выше.
Итак, мое «решение»: я полагаюсь на касание в самой панели вкладок, всегда имеющее целое округленное значение для оси y, в противном случае я предполагаю, что оно находится в зоне перекрытия над панелью вкладок. Я проверял это довольно долго, и, похоже, он постоянно так себя ведет.
код:
@implementation UITabBar (Me)
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
if ([[NSString stringWithFormat:@"%.6f", point.y] hasSuffix:@".000000"])
{
return [super hitTest:point withEvent:event];
}
else
{
return nil;
}
}
@end