touchesНачалась задержка после представления UIView

Я пытаюсь загрузить UIView, а затем сразу обнаруживаю касания в этом новом представлении. В настоящее время переопределение touchesBegan дает задержку около секунды.

Итак, я загружаю UIView и сразу же продолжаю тапать по экрану. Вызов touchesBegan занимает около секунды. С этого момента все хорошо. Однако изначально я не могу позволить себе ~второе ожидание.

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

Как я могу получить немедленную обратную связь о прикосновениях от недавно представленного UIView? Спасибо.

-- ИЗМЕНИТЬ НИЖЕ --

Я играл с этим в течение последних нескольких часов. Даже при создании пользовательского UIWindow и переопределении sendEvent UITouchPhase останавливается при отображении нового представления. Чтобы снова начать получать события, мне нужно убрать палец с экрана и снова приложить его к экрану. (Я не хочу этого делать).

Проблема, похоже, связана с переходом к новому контроллеру представления. Когда он переходит, фаза касания заканчивается. Если я просто добавлю подвид к текущему контроллеру представления, я увижу желаемую функциональность (т.е. мгновенную реакцию на прикосновение).

Учитывая, что мое недавно представленное представление содержит много логики, я хотел обернуть все это в свой собственный контроллер представления, а не добавлять его в контроллер представления докладчика. Есть ли способ сделать это и использовать addSubview для его представления? Надеюсь, это должно привести к желаемому эффекту.


person cud_programmer    schedule 26.09.2014    source источник


Ответы (4)


В конце концов, я создал собственный контроллер представления с собственным xib. Там, где я мог бы перейти, теперь я создаю экземпляр этого пользовательского контроллера представления и добавляю его представление. Это устранило задержку касания.

person cud_programmer    schedule 27.09.2014
comment
Я сталкиваюсь с той же проблемой здесь. stackoverflow.com/questions/33727638/ Как вы решили свою проблему? - person TomSawyer; 16.11.2015

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

myViewController.view.multipleTouchEnabled=NO;
person mark    schedule 26.09.2014
comment
Пробовал отключать множественное касание, к сожалению, не останавливает задержку. Я также реализовал пользовательский UIWindow и переопределил sendEvent. Как ни странно, это также останавливает получение/отправку событий в течение периода задержки. - person cud_programmer; 26.09.2014

Что касается вашего последнего вопроса, загляните в удержание контроллера представления . Начиная с iOS 5 Apple официально и безопасно предоставила хуки для представления одного контроллера представления в качестве подчиненного представления другого.

К сожалению, у меня нет понимания большей проблемы.

person Tommy    schedule 26.09.2014

Я нашел ответ, который сработал для меня, из аналогичного вопроса, заданного здесь:

iOS: почему touchesBegan имеет некоторую задержку какая-то конкретная область в UIView

Это решение не отмечено флажком в этой ветке, поэтому я скопирую его сюда, чтобы его было легче найти.

override func viewDidAppear(animated: Bool) {
    let window = view.window!
    let gr0 = window.gestureRecognizers![0] as UIGestureRecognizer
    let gr1 = window.gestureRecognizers![1] as UIGestureRecognizer
    gr0.delaysTouchesBegan = false
    gr1.delaysTouchesBegan = false
}
person Andreas    schedule 29.04.2019