UIPinchGestureRecognizer на суперпредставлении не пытается распознать щепотку, когда прикосновения расположены в разных подпредставлениях

Я пытаюсь настроить жест щипка в корневом представлении в моей иерархии представлений. Этот жест сжимания не распознается, если два касания, составляющие сужение, расположены в двух разных подпредставлениях. На следующей диаграмме мое представление зеленого корня не распознает жест щепотки (обозначается оранжевыми штрихами), потому что каждое касание существует в различном синем подпредставлении. Эти синие подпредставления являются братьями и сестрами в иерархии представления и потомками представления зеленого корня.

Посмотреть иерархию с диаграммой касаний

Пинч жест правильно распознается, если оба касания происходят в пределах одного и того же подпредставления. Распознаватель жестов сжатия никогда не изменяет состояние и, следовательно, никогда не получает возможности распознать повышение, когда касания происходят в разных подпредставлениях (как проверено путем создания подкласса UIPinchGestureRecognizer и регистрации вызовов для setState:).

Наконец, подпредставление и представление root обрабатывают ряд других жестов, включая панорамирование и касания. Я попытался добавить прозрачное наложение в иерархию представления, чтобы захватить пинч, что сработало, но это прозрачное наложение блокирует касания и касания, которые правильно нацелены на синие подпредставления.

Есть ли способ заставить жест щепотки работать в ситуациях, подобных приведенной выше диаграмме, или я обречен на то, что смогу распознавать щепотку только в том случае, если это происходит в пределах одного представления в иерархии?

1 ответ

У моей проблемы было что-то общее с вашей - UIPinchGestureRecognizer не работал на суперпредставлении, когда оба пальца были на 1 подпредставлении. В нем был UIScrollView, внутренний распознаватель pich которого задерживал мой собственный.

Также проблему можно решить, установив делегат распознавателя жестов и установив его способность распознавать касания, когда это делают другие распознаватели.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return YES;}

но это был не мой случай (нужно, чтобы они ждали друг друга из-за желания клиента)

Другие вопросы по тегам