Почему события касания моего iPad задерживаются (иногда до секунды)? - PullRequest
2 голосов
/ 21 мая 2011

Я работаю над игрой и использую подкласс CAEAGLLayer с поддержкой UIView для представления игрового движка. Сенсорная обработка выполняется с использованием -touchesBegan:withEvent: et. и др.

Все работает отлично, за исключением того, что очень редко, если быстро нажимать на один из элементов управления на экране, -touchesBegan:withEvent: не вызывается где-то между 0,1 и 1-2 секундами. Это происходит, может быть, один раз в 20 раз, и только если вы сначала быстро нажмете на экран (4-5 раз). Вероятнее всего, это произойдет, если я также удерживаю другой палец на другом элементе управления на экране.

Думая, что это как-то связано с моим собственным кодом, я вложил в подкласс UIApplication, чтобы добавить оператор ведения журнала в -sendEvent:. Когда происходит медленное касание, -sendEvent: не вызывается до тех пор, пока через некоторое время не начнется касание, поэтому код обработки касания в моем подклассе UIView, похоже, не виноват.

Кто-нибудь знает, что здесь происходит (кроме того, что в iOS есть какая-то неясная ошибка)? Есть ли какая-то внутренняя «очередь событий», которая делает доставку событий запаздывающей, когда она заполняется? Кто-нибудь еще испытывал это?

1 Ответ

1 голос
/ 22 мая 2011

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

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

...