2009-06-13 2 views
7

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

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

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

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

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

Любая помощь будет принята с благодарностью, спасибо.

ответ

3

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

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

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

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

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

+0

Спасибо, я посмотрю, когда я получу некоторое время. – Jasarien

+0

Как массив activeTouches отличается от того, что система хранит для вас в [event touchhesForView: self]? –

2

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

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

23

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

Из справочных материалах компании Apple:

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

+0

Соответствующая документация в настоящее время находится здесь http://developer.apple.com/library/ios/#documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/MultitouchEvents/MultitouchEvents.html#//apple_ref/doc/uid/TP40009541-CH3-SW14 (если этот URL-адрес поврежден, посмотрите в «Руководстве по обработке событий для iOS» в разделе «События Multitouch - Обработка событий Multitouch - Обработка сложной последовательности мультитачей») – Piku

2

Я ознакомился с кодом Kailoa Kadano. В основном вы сохраняете NSMutableArray текущих объектов UITouch. Однако в документации UITouch указано следующее:

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

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

2

Я искал ту же информацию. И да, похоже, вы не должны хранить данные UITouch. Согласно разделу «Обработка сложной последовательности Multi-Touch Sequence» этого Apple Developer Documentation «правильный» способ отслеживания нескольких касаний - значением указателя события UITouch.

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