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

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

Это в UIView, а не в UIScrollView

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
4 259
4

Ответы 4

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

Спасибо, но нет, это размещено в простом старом UIView

Tim Sullivan 03.11.2008 21:33

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

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

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

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

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

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

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

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

У меня такая же проблема (как я уже упоминал в своем исследовании проблемы, с которой я столкнулся stackoverflow.com/questions/918734/…). Я думаю, что это настоящая проблема с SDK, потому что даже если вы вообще не выполняете обработку, вы можете получить задержку в 200 мс после touchBegin, прежде чем вы получите первые touchMoved.

U62 07.06.2009 21:43

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

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

Другие вопросы по теме