Задержка с сенсорными событиями

У нас есть приложение в AppStore Bust ~ A ~ Spook У нас была проблема с. Когда вы касаетесь экрана, мы используем CALayer, чтобы найти положение всех видов во время их анимации, и если вы нажимаете одно, мы запускаем последовательность кубиков. Однако есть заметная задержка, кажется, что касания буферизированы, и мы получаем событие с опозданием. Есть ли способ опроса или лучший способ реагировать на прикосновения, чтобы избежать этого времени задержки?

Это в UIView, а не в UIScrollView


person Community    schedule 03.11.2008    source источник


Ответы (4)


Вы используете UIScrollView для размещения всего этого? У этого есть свойство, называемое delaysContentTouches. По умолчанию это ДА, что означает, что представление пытается определить, является ли прикосновение жестом прокрутки или нет, прежде чем передать его. Вы можете попробовать установить для него значение NO и посмотреть, поможет ли это.

person Ben Gottlieb    schedule 03.11.2008
comment
Спасибо, но нет, это размещено в простом старом UIView - person ; 03.11.2008

Это довольно старый пост о сезонном приложении, поэтому OP, вероятно, все еще не работает над этой проблемой, но на тот случай, если другие столкнутся с той же проблемой и сочтут это полезным.

Я согласен с Кримом в том, что перегрузка ЦП - частая причина значительных задержек при обработке сенсорного ввода, хотя есть много возможностей по оптимизации, прежде чем придется вытаскивать OpenGL. CALayer довольно хорошо оптимизирован для задач, которые вы здесь описываете.

Сначала мы должны проверить основы:

  • CALayers добавлены в layer главного представления
  • touchesBegan:withEvent: реализовано на главном экране
  • Когда фаза UITouchPhaseBegan, вы вызываете hitTest: в layer главного представления, чтобы найти соответствующий подуровень.
  • Последовательность штампа начинается с соответствующего объекта модели, обновляя слой.

Затем мы можем проверить производительность с помощью инструментов. Убедитесь, что ваш процессор не перегружен. В симуляторе все работает нормально, но есть проблемы с устройством?

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

person Rob Napier    schedule 12.05.2009
comment
У меня такая же проблема (как я уже упоминал в своем исследовании проблемы, с которой я столкнулся stackoverflow.com/questions/918734/). Я думаю, что это настоящая проблема с SDK, потому что даже если вы вообще не выполняете обработку, вы можете получить задержку в 200 мс после touchBegin, прежде чем вы получите первые touchMoved. - person U62; 07.06.2009

Отложенные касания обычно указывают на перегрузку процессора. Использование NSTimer для покадрового действия может мешать обработке касаний.

Если это касается вашего приложения, то мой совет очень прост: OpenGL.

person Kriem    schedule 08.05.2009

Если вы выполняете какую-либо анимацию базовой анимации для CALayers одновременно с проверкой попадания, вы должны получить presentationLayer перед вызовом hitTest:, поскольку положения слоев модели не отражают то, что может быть экрана, но позиции, в которые анимируются слои.

Надеюсь, это поможет.

person Andrew Pouliot    schedule 28.05.2009