2012-04-14 2 views
1

Как показано на диаграмме ниже, мое приложение имеет несколько UIViews, B, C и D, бок о бок, и все содержащиеся в обволакивающее UIView A:Детектирование жесты перекрывающихся областей экрана в iOS5

enter image description here

У меня есть UIPinchGestureRecognizer в каждом из B, C и D. То, что я также хотел бы сделать, это распознать другой жест по всей области A (не мешая другим распознавателям жестов работать).

Что является лучшей стратегией для этого? Я нацелен на iOS5 +, не требуется обратной совместимости.

Также стоит отметить, что распознаватель жестов для A, вероятно, должен быть обычным распознавателем жестов, так как я хочу обнаружить щепотку, но с> двумя пальцами.

мысль:

При установке жест распознаватель для A не работает хорошо, можно было бы сделать это по-старому, используя touchesBegan и т.д. Как UIResponder docs записки, вы можете иметь подкласс из UIView просто позвоните [super touchesBegan:touches withEvent:event], чтобы он прошел в цепочке ответчиков, если вас это не интересует.

ответ

0

Оказывается, только добавление распознавателей жеста очевидным образом работает, по крайней мере, для жестов, которые я хочу признать. Я подумал, что это будет сложнее.

0

Добавьте GestureRecognize в A, как обычно.

Теперь вам нужно начать с тестирования ударов, что было затронуто.

Сначала вам нужно проверить z-индекс элементов. Например, если вы коснетесь B, тогда ваша функция будет проходить цикл/удар по всем предметам, которые затронуты, в этом случае A & B. После того, как ваша функция обнаруживает как A & B (B over A) следует проверить для z-индекса. Например, z-индекс B равен 2, тогда A z-index равен 1. Теперь вы знаете, что B - это то, что пользователь намеревался коснуться, потому что это z-индекс выше, а это значит, что он сверху.

После того, как вы определили цель (B), перед выполнением ее GestureRecognize вам необходимо временно отключить GestureRecognize для A, чтобы устранить любой конфликт между перекрывающимися GestureRecognizes. После завершения/завершения B-касания включите G's GestureRecognize.

+0

Спасибо за ваш ответ. Хит-тестирование, в котором компонент/часть кода? С помощью какой техники? (например, касаетсяBegan и т. д.)? – occulus

+0

У меня нет кода, который я могу разместить как есть, но я попытаюсь объяснить. Используйте оба касания как начальную идентификацию касания, а GestureRecognizes в качестве вторичного обработчика для касания внутри идентифицированного компонента. На начальном касании нажмите тест на весь экран. Прокрутите все свои элементы и найдите, какие из них находятся в коснувшихся координатах. Поэтому, если вы коснулись B, цикл должен найти B и A, так как оба находятся в координатах контакта. Затем вы можете отключить/включить конфликтующие GestureRecognizes и после завершения жестов включить их обратно. –

Смежные вопросы