Самое раннее сенсорное событие регистрации в iOS

После изменения структуры моих UIViews я, кажется, ввел задержку в рисовании (пользователи могут рисовать на экране пальцем). Раньше начало рисования было незначительным, а теперь есть заметная латентность между начальным движением пальца и проведением линии. По мере того, как я продолжаю рисовать, задержка, кажется, исчезает. Так что возможно, что начальное событие касания где-то задерживается.

Мой вопрос не в том, как решить этот конкретный экземпляр, а в диагностике я столкнулся со следующим вопросом: В какой самый ранний момент я могу зарегистрировать (время начала) прикосновения к экрану?

Теперь я ставлю временные метки в hitTest во всех UIResponders (UIWindow -> UIView -> ... -> DrawingView). Но могут ли быть задержки перед первым вызовом hitTest в UIWindow?

Спасибо!


person Philip De Vries    schedule 06.08.2017    source источник


Ответы (1)


UIWindow доставляет события касания в распознаватели жестов, прежде чем доставлять события непосредственно в представления. Это происходит внутри -[UIWindow sendEvent:](https://developer.apple.com/documentation/uikit/uiwindow/1621614-sendevent). Я считаю, что он проверяет иерархию представлений, чтобы найти распознаватели жестов, которые могут быть заинтересованы в событии, поэтому вы не должны ожидать, что сообщения hitTest:withEvent: будут задержаны.

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

Обратите внимание, что многие стандартные представления UIKit используют распознаватели жестов. В частности, UIScrollView использует распознаватели жестов, которые могут задерживать события касания, и оба UITableView и UICollectionView являются подклассами UIScrollView.

person rob mayoff    schedule 06.08.2017
comment
Спасибо. Итак, если есть просмотр, задерживающий касания, мне, вероятно, следует искать задержку между последовательностью hitTest и touchesBegan? Я также напечатал временную метку в sendEvent, но она появляется после последовательности hitTest. - person Philip De Vries; 06.08.2017