UITabBar / UIToolBar проблема перекрытия (iphone SDK) - PullRequest
1 голос
/ 23 октября 2009

У меня есть пользовательская кнопка в другом виде прямо над моим UITabBar. Кажется, что над UITTabBar есть скрытая «область нажатия», которая не позволяет мне нажимать на нижнюю половину моей пользовательской кнопки в другом представлении. Подвид кнопки находится поверх всех других представлений, включая пользовательский UITabBar.

Этот эффект действительно легко заметить в симуляторе, используя пример кода UICatalog. Пройдите в раздел панели инструментов. Поместите курсор мыши примерно на 5-10 пикселей над элементами панели инструментов внизу и нажмите, чтобы увидеть, что вы можете вызвать сенсорное событие над кнопкой.

Мне нужно выяснить, как ограничить эту область попадания границами панели uitoolbar или самой панели uitabbar и не позволять iPhone совершать какие-либо виды магии доступности попаданий.

Я думаю, что я исчерпал все варианты: \ Я думал, что clipsToBounds (на UITabBar) добьется цели, но, очевидно, нет.

Также я делаю это полностью в коде, поэтому нет Interface Builder ...

1 Ответ

1 голос
/ 21 января 2010

Для любого, кто сталкивается с этим вопросом, у меня есть решение для этого, хотя оно хорошо относится к территории "грязного взлома" и может порваться с более новыми (чем 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...