Поведение Cocoa Touch для событий - PullRequest
0 голосов
/ 20 января 2009

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

Из того, что говорится в руководстве: touchesBegan вызывается, когда палец впервые касается экрана.

touchesMoved вызывается при движении пальца по экрану.

touchesEnded вызывается, когда палец отрывается от экрана.

Проблема становится немного затуманенной с участием нескольких пальцев:

Даже если для флага Multi-touch Interaction установлено значение NO, приложение продолжает вызывать метод touchesBegan для представления, которое в данный момент отслеживает другое касание. Это кажется мне нелогичным.

Это правильное поведение? Я думаю, что новый UITouch (даже добавленный к отслеживаемому текущему событию) не вызовет метод touchesBegan.

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

Спасибо, Corey

Ответы [ 2 ]

0 голосов
/ 22 января 2009

Я разобрался в своей проблеме, но сначала выясню правильную функциональность нескольких касаний:

Если для вашего представления множественный флаг TouchTouchEnabled имеет значение NO, метод touchesBegan этого представления НЕ должен запускаться, если к экрану применено второе касание.

С этим, решение моей проблемы:

Мое представление содержит несколько подпредставлений. Представление отвечает за обработку прикосновений для себя и подвидов.

Когда мой код не работал должным образом, у меня было подпрограмма userInteractionEnabled = YES. Это означало, что когда касалось подпредставления, оно передавало касание суперпредставлению, независимо от того, отслеживало ли суперпредставление другое касание.

Другими словами, хотя UIApplication учитывает флаг multiTouchEnabled представления, другие представления в цепочке респондента - нет.

0 голосов
/ 20 января 2009

Да, я считаю, что это правильное поведение. Вы можете отслеживать местоположение каждого сенсорного события, поэтому я думаю, что вам просто нужно структурировать свою логику так, чтобы вы обрабатывали:

UITouch *touch = [[allTouches allObjects] objectAtIndex:0];

, чтобы получить первое касание, и objectAtIndex: 1 для второго. Я думаю, что это до четырех или пяти (не уверен, пожалуйста, смотрите документы).

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...