2008-11-03 2 views
2

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

Это в UIView UIScrollView не

ответ

4

Вы используете UIScrollView провести все это? Есть свойство того, что называется delayaysContentTouches. Это значение по умолчанию равно YES, что означает, что представление пытается определить, является ли касание жестом прокрутки или нет, прежде чем передавать его. Вы можете попробовать установить это значение НЕТ и посмотреть, помогает ли это.

+0

Спасибо, но, нет, это размещено в обычном старом UIView – 2008-11-03 18:33:49

+0

Хорошо. Хороший ответ – 2012-05-20 20:06:03

0

Отложенные касания обычно указывают на перегрузку ЦП. Использование NSTimer для действий, основанных на кадре-кадрах, подвержено влиянию сенсорной обработки.

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

1

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

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

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

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

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

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

0

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

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

Смежные вопросы