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

У вас есть много решений:)

простой способ (в стиле C) :

print("[%i, %i, %i]" %(1, 2, 3))

Используйте str.format ( )

print("[{0}, {1}, {2}]", 1, 2, 3)

Использовать str.Template ()

s = Template('[$a, $b, $c]')
print(s.substitute(a = 1, b = 2, c = 3))

Вы можете прочитать PEP 3101 - Расширенное форматирование строк

14
задан Corey Floyd 4 June 2009 в 02:11
поделиться

3 ответа

Чтобы решить вашу проблему, откажитесь от метода handleTouches. Первое, что вы делаете в своем методе handleTouches, - это включаете touchPhase, но это уже дано вам. Если вы получаете касание в touchBegan, вы знаете, что касание находится в UITouchPhaseBegan. Объединяя касания из четырех методов касания в один метод, вы теряете цель иметь четыре метода делегата.

В каждом из этих методов Apple дает вам возможность иметь дело с разными фазами текущего касания.

] Во-вторых, вам не нужно искать событие для текущего касания, оно дается вам как параметр: touches.

Событие состоит из наборов касаний. Для удобства вам даются текущие штрихи, хотя их также можно найти в событии.

Итак, в touchBegan, вы начинаете отслеживать прикосновения.

    - (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event{


        NSString *startPoint = NSStringFromCGPoint([[touches anyObject] locationInView:self]);  

        NSDictionary * touchData = [NSDictionary dictionaryWithObjectsandKeys: startPoint, @"location", touches, @"touch"]

        [startingLocations addObject:touchData];

        }

Я использую массив словарей для хранения данных касания.

Попробуйте разделить код и переместить его в соответствующий метод касания. Для руководства у Apple есть несколько примеров проектов, которые фокусируются на прикосновениях и показывают, как настроить эти методы.

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

Указатель на каждый набор касаний остается постоянным, изменяются только данные.

Кроме того, я бы прочитал раздел руководства по программированию для iPhone OS, посвященный обработке событий, в котором более подробно рассматривается то, что я сказал выше, с несколькими диаграммами, объясняющими взаимосвязь прикосновений к событиям во времени.

Отрывок:

В iPhone OS, объект UITouch m, используя массив словарей для хранения моих данных касания.

Попробуйте разделить код и переместить его в соответствующий метод касания. Для руководства у Apple есть несколько примеров проектов, которые фокусируются на прикосновениях и показывают, как настроить эти методы.

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

Указатель на каждый набор касаний остается постоянным, изменяются только данные.

Кроме того, я бы прочитал раздел руководства по программированию для iPhone OS, посвященный обработке событий, в котором более подробно рассматривается то, что я сказал выше, с несколькими диаграммами, объясняющими взаимосвязь прикосновений к событиям во времени.

Отрывок:

В iPhone OS, объект UITouch m, используя массив словарей для хранения моих данных касания.

Попробуйте разделить код и переместить его в соответствующий метод касания. Для руководства у Apple есть несколько примеров проектов, которые фокусируются на прикосновениях и показывают, как настроить эти методы.

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

Указатель на каждый набор касаний остается постоянным, изменяются только данные.

Кроме того, я бы прочитал раздел руководства по программированию для iPhone OS, посвященный обработке событий, в котором более подробно рассматривается то, что я сказал выше, с несколькими диаграммами, объясняющими взаимосвязь прикосновений к событиям во времени.

Отрывок:

В iPhone OS, объект UITouch

Попробуйте разделить код и переместить его в соответствующий метод касания. Для руководства у Apple есть несколько примеров проектов, которые фокусируются на прикосновениях и показывают, как настроить эти методы.

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

Указатель на каждый набор касаний остается постоянным, изменяются только данные.

Кроме того, я бы прочитал раздел руководства по программированию для iPhone OS, посвященный обработке событий, в котором более подробно рассматривается то, что я сказал выше, с несколькими диаграммами, объясняющими взаимосвязь прикосновений к событиям во времени.

Отрывок:

В iPhone OS, объект UITouch

Попробуйте разделить код и переместить его в соответствующий метод касания. Для руководства у Apple есть несколько примеров проектов, которые фокусируются на прикосновениях и показывают, как настроить эти методы.

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

Указатель на каждый набор касаний остается постоянным, изменяются только данные.

Кроме того, я бы прочитал раздел руководства по программированию для iPhone OS, посвященный обработке событий, в котором более подробно рассматривается то, что я сказал выше, с несколькими диаграммами, объясняющими взаимосвязь прикосновений к событиям во времени.

Отрывок:

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

Указатель на каждый набор касаний остается постоянным, изменяются только данные.

Кроме того, я бы прочитал раздел руководства по программированию для iPhone OS, посвященный обработке событий, в котором более подробно рассматривается то, что я сказал выше, с несколькими диаграммами, объясняющими взаимосвязь прикосновений к событиям во времени.

Отрывок:

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

Указатель на каждый набор касаний остается постоянным, изменяются только данные.

Кроме того, я бы прочитал раздел руководства по программированию для iPhone OS, посвященный обработке событий, в котором более подробно рассматривается то, что я сказал выше, с несколькими диаграммами, объясняющими взаимосвязь прикосновений к событиям во времени.

Отрывок:

В iPhone OS, объект UITouch представляет прикосновение, а событие UIEvent объект представляет собой событие. Событие объект содержит все сенсорные объекты для текущая последовательность мультитач и может предоставлять сенсорные объекты, специфичные для вид или окно (см. Рисунок 3-2). А сенсорный объект является постоянным для данного палец во время последовательности, а UIKit изменяет его, отслеживая палец повсюду. Атрибуты прикосновения эти изменения являются этапом прикоснуться, его расположение на виде, его предыдущее местоположение и его отметка времени. Код обработки событий оценивает эти атрибуты, чтобы определить, как реагировать к событию.

7
ответ дан 1 December 2019 в 14:12
поделиться

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

В вашем -handleTouches , вы можете поместить что-то вроде этого в свой цикл for:

// ..existing code..
CGPoint previousLocation = [touch previousLocationInView:self];

// Loop through previous touches
for (int j = 0; j < [previousTouchLocationArray count]; j++) {
  if (previousLocation == [previousTouchLocationArray objectAtIndex:j]) {
    // Current touch matches - retrieve from finger handle j and update position
  }
}

// If touch was not found, create a new Finger and associated entry 

Очевидно, вам нужно будет немного поработать, чтобы интегрировать это в свой код, но я почти уверен, что вы можете использовать эту идею, чтобы правильно идентифицировать касания как они перемещаются по экрану. Также я только что понял, что CGPoint плохо впишется в NSArray - вам нужно обернуть их в объекты NSValue (или использовать другой тип массива).

0
ответ дан 1 December 2019 в 14:12
поделиться

Похоже, что «правильный» способ отслеживать множественные касания - это значение указателя события UITouch.

Вы можете найти более подробную информацию в разделе «Обработка сложной последовательности мультисенсорного ввода» этой документации разработчика Apple

8
ответ дан 1 December 2019 в 14:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: