У меня есть куча UIViews, как на изображении ниже. Красное/розовое (полупрозрачное) изображение находится поверх других.
- У красного есть
UISwipeGestureRecognizer
. - Зеленый имеет
UITapGestureRecognizer
. - У Blue нет распознавателя.
Нажмите на видимую (нижнюю левую) часть зеленого цвета, запуская свой распознаватель.
Прикосновение к скрытым частям Green не позволяет запускать свой распознаватель (красный блокирует его).
Это проблема: я хочу, чтобы Green запускался. Как я могу это сделать?
На практике представления могут быть в любом порядке, любое число и быть под-представлениями друг друга и т.д. Но проблема одна и та же:
Как я могу надежно найти верхний вид, который может обрабатывать жест (коснитесь или проведите по экрану)?
Я пробовал с кодом ниже. Он аккуратно пересекает все представления, но он терпит неудачу, поскольку он не может знать, является ли событие частью салфетки или крана. Таким образом, метод всегда возвращает красный вид. Если я удаляю распознаватель прокрутки из Red, код работает правильно.
- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
UIView *hitView = [super hitTest:point withEvent:event];
if (hitView == self)
{
if (self.hasASwipeRecognizer)
return self; // What if this was a tap?
if (self.hasATapRecognizer)
return self;
else
return nil;
}
else
return hitView;
}