Задержка состояния кнопки

У меня проблема в двух совершенно разных ситуациях, что делает ее действительно странной.

  • Ситуация: UIButton как подвид другого UIView.
  • Ситуация: UIBarButtonItem в UIToolBar.

В обеих ситуациях кнопки выделяются только после небольшой задержки, приблизительно 0,5 секунды. Определенно, чтобы долго выделять вид, постукивая по нему нормально. Они оба отлично работают на симуляторе, но не на реальном устройстве (у меня iPhone 5 с iOS 7.0.4).

Что я пробовал
Установка zPosition на максимальное значение (MAXFLOAT) этих представлений, чтобы гарантировать, что ничто не блокирует кран.

Явное включение выделения.

Оба явно не работают.

Изменить: все еще не решено.

Ответ 1

Это может произойти, если кнопки расположены близко к нижнему краю дисплея. Там конфликт с жесткой жесты системы, чтобы представить Control Center (или App Switcher на iPhone X и iPad). Это задерживает касание кнопок, пока не будет определено, что пользователь не выполняет системный жест.

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

override func preferredScreenEdgesDeferringSystemGestures() -> UIRectEdge {
    return .bottom
}

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

Ответ 2

Являются ли UIButtons внутри UIScrollView? Если это так, задержка существует, поэтому scrollview может определить, является ли касание для прокрутки, или оно должно быть передано в подвью.

См. также Прикосновение UIButton задерживается в UIScrollView

Ответ 3

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

  • My UIButton является подзаголовком UINavigationController.view
  • Там нет задержки на симуляторе
  • Но есть задержка, чтобы показать выделение на устройстве.

Я только узнал, что это произойдет, только если я запустил приложение из Xcode. Если я отключу устройство и откройте приложение из него, все будет работать нормально.

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