Вопрос

Я пытаюсь провести различие между двумя (или более) Объекты UITouch на iPhone.В частности, я хотел бы знать, в каком порядке происходили касания.

Например, в my -touchesBegan:с событием:метод, которым я получаю NSSet объектов UITouch.Теперь я могу узнать, сколько всего касаний, но какой объект представляет какой палец?

Я заметил свойство timestamp в UITouch - это то, что я ищу?Я вижу, как это было бы полезно для получения последнего или первого касания - при условии, что касания не изменяются...

В этом и заключается моя проблема.Я могу использовать временную метку, чтобы выделить последнее касание, но тогда касание, которое произошло первым, перемещается, и ОНО становится последним касанием...

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

Любая помощь была бы высоко оценена, спасибо.

Это было полезно?

Решение

У меня есть пример сенсорного кода:

http://github.com/kailoa/6tringle-touchsamplecode/tree/master http://6tringle.com/blog/2009/TouchSampleCode.html

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

Взгляните на NSMutableArray *ActiveTouches.Эту коллекцию я использую для отслеживания порядка, в котором происходят касания.

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

Другие советы

Каждый палец получает один объект UITouch, а такой же объект дается вам снова и снова.Просто запомните указатели на набор исходных объектов UITouch и выполните сравнение указателей, чтобы отслеживать пальцы.

Из справочной документации Apple:

Объект касания является постоянным для данного пальца во время последовательности, и UIKit изменяет его, отслеживая палец на протяжении всей последовательности.Атрибутами касания, которые изменяются, являются фаза касания, его местоположение на представлении, его предыдущее местоположение и его временная метка.Код обработки событий оценивает эти атрибуты, чтобы определить, как реагировать на событие.

Часто обсуждаемое решение — наблюдать за событиями и сравнивать текущие значения x и y и предыдущие значения x и y, чтобы сопоставить их.Хотя, похоже, есть некоторые хитрости.События могут происходить не по порядку, и я видел случаи, когда казалось, что оборудование или операционная система путаются из-за множества (10) движущихся пальцев.

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

Я взглянул на код Кайлоа Кадано.По сути, вы сохраняете NSMutableArray текущих объектов UITouch.Однако в документации UITouch указано следующее:

Объект UITouch является постоянным на протяжении всей последовательности мультитач.Вам никогда не следует сохранять объект UITouch при обработке события.Если вам нужно сохранить информацию о касании от одной фазы к другой, вам следует скопировать эту информацию из объекта UITouch .

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

Я искал ту же информацию.И да, похоже, вы не должны сохранять данные UITouch.В соответствии с разделом «Обработка сложной последовательности мультитач» данного руководстваДокументация для разработчиков Apple, «правильный» способ отслеживания нескольких касаний — это значение указателя события UITouch.

Взгляните на эти ответы, которые я дал, которые могут помочь:

получение информации в API UIResponder

айфон:Отслеживание/идентификация отдельных касаний

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top