2011-02-07 2 views
1

Я пытался реализовать функцию отклонения пальцев для приложения для рисования, которое я разработал для iPhone, и заметил какое-то странное поведение в событиях касания. Когда я помещаю ладонь на экран и постоянно поднимаю часть области вверх, а затем снова опускаю ее, я получаю много событий touchBegin, но только несколько событий touchEnd. Есть ли что-то, что я не знаю о механизме сенсорного управления iOS? Не должно быть количество событий touchEnd и touchBegin, принадлежащих каждому объекту UITouch, равным?Отсутствие событий touchEnd на iPhone

В моем окне есть только один вид, и он занимает весь экран. Оба вида и окна имеют мультитач. Я рассчитываю на события, печатая количество штрихов, используя NSLog в начале методов touchBegin и touchEnd. Поэтому я принимаю во внимание тот факт, что одно событие может содержать информацию о нескольких касаниях.

+0

Добро пожаловать в StackOverflow. Я смущен вашей формулировкой: «Не должно быть количество событий touchEnd и touchBegin, принадлежащих каждому объекту UITouch?». Не возражаете ли вы переписать его? – Moshe

+0

Позвольте мне перефразировать это: насколько я знаю, если касание не отменено некоторым прерыванием ОС, после того, как я получаю событие touchBegin для касания, тогда я должен получить соответствующее событие touchEnd для него в какой-то момент. – sct

ответ

3

Не забудьте предоставить обработчик для прикосновенийСвязанные события. Вы можете получить touchsCancelled-вызов после touchBegan и без соответствующего события touchesEnded.

+0

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

+0

Я попробовал и подтвердил, что проблема связана с событиями TouchCanceled, как вы уже догадались. Похоже, что когда ОС не может точно отслеживать касание, она отменяет прикосновение. Спасибо за напоминание. – sct

1

Вместо того, чтобы смотреть на количество touchesBegan:withEvent: и touchesEnded:withEvent: вызовов, вы должны смотреть на NSSetUITouch из объектов, передаваемых этими методами. Так, например, если вы поместили один палец, а затем второй палец на экран, вы получили бы два звонка . Если вы одновременно подняли оба пальца с экрана, вы получите один звонок touchesEnded:withEvent:; NSSet из UITouch переданных объектов означали бы, что два пальца были подняты.

+0

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

+0

Я неправильно понял ваш вопрос. Скорее всего, это касается прикосновений событий, как описано в ответе hotpaw2. – pwc

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