Обнаружение касания ладонью/отпускания экрана iphone

#ios #swift #touchesbegan #touchesended #touchescancelled

Вопрос:

Реализация своего рода кнопки «сигнал бедствия», которая должна работать следующим образом:

  1. Пользователь запускает приложение и прикрывает экран ладонью
  2. Проходит некоторое время, пользователь может ввести дополнительные штрихи за это время или удалить некоторые из существующих (но не все из них), расположение/форма штрихов могут измениться
  3. Когда пользователь отпускает руку (т. е. удаляет последнее касание), приложение подает сигнал бедствия

В принципе, приложение должно зарегистрировать два события: (1) прикосновение к экрану (2) все прикосновения освобождаются

Я пытаюсь использовать методы touchesBegan/touchesEnded, и они работают для прикосновений к небольшой площади (кончиками пальцев), но при касании экрана полной ладонью или даже только краем ладони сразу срабатывает функция touchesCancelled, пока рука все еще находится на экране. Очевидно, что никакие другие события не испускаются при последующем высвобождении руки.

Я попытался подклассировать UIWindow и UIApplication и переопределить SendEvent в них, но не получил дополнительной информации — прикосновения к большой области запускают начало касания и немедленно отменяют касание, после чего отпуская руку, ничего не выдает. В некоторых случаях на большой площади не происходит никаких событий, даже прикосновений. В принципе, iOS не позволяет мне работать с очень простым сценарием — обнаруживать только факт касания/разблокировки экрана.

Есть ли какой-либо способ напрямую запросить состояние касания экрана и не работать с цепочкой ответчиков? Или запретить запуск события отмены? Или, может быть, я что-то упускаю?