я создаю пользовательский элемент управления * с помощью подклассов UIControl и опрокинув следующие методы:подклассов UIControl для мультитач
- beginTrackingWithTouch:withEvent:
- continueTrackingWithTouch:withEvent:
- endTrackingWithTouch:withEvent:
- cancelTrackingWithEvent:
Этот элемент управления будет поддерживать многоканальный h взаимодействия. В частности, один или два пальца могут касаться вниз, тянуться на некоторое время, а затем прикоснуться к ним независимо.
Моя проблема возникает в конце этих событий мультитач, в endTrackingWithTouch:withEvent:
. Система называет этот метод на моем контроле ровно один раз на последовательность мультитач, и он вызывается при первом касании, которое происходит. Это означает, что второе касание, которое все еще можно перетаскивать, больше не будет отслеживаться.
Эта последовательность действий служит примером для этого явления:
- Палец приземляется.
beginTracking
называется. - Finger A таскает вокруг.
continueTracking
неоднократно вызывается для обновления моего элемента управления. - Finger B Прикосновение вниз.
beginTracking
называется. - Пальцы A и B перетащить.
continueTracking
неоднократно вызывается для обновления моего элемента управления. - Finger B касается.
endTracking
называется. - Finger A таскает вокруг. Никакие методы не вызываются.
- Finger A касается вверх. Никакие методы не вызываются.
Проблема заключается в последних трех шагах в этой последовательности. The documentation for UIControl
говорит следующее из endTrackingWithTouch:withEvent:
:
Направлено управления, когда последний штрих для данного события полностью заканчивается, говоря это, чтобы остановить отслеживание.
Тем не менее, мне кажется, что после того, как палец B прикасается в пункте 5, выше, последний штрих к данному событию еще не полностью закончился. Последнее касание пальцем A!
* Ползунок диапазона, если вы должны спросить. Но уже есть много ползунков с открытым исходным кодом, вы говорите. Да, правда, но этот будет поддерживать мультитач и автоматический макет.
Это подход, который я сейчас рассматриваю. Однако это означает, что мне нужно переопределить переменную 'tracking', а также переменную' touchInside', так как я полностью закрываю сенсорную обработку 'UIControl'. Кроме того, я должен переопределить 'hitTest: withEvent:', чтобы убедиться, что любые касания, которые делают его «touchhesBegan: withEvent:» - это те, которые я хочу обработать, потому что я не могу называть 'super' в этой точке. – ravron
Документы говорят: Переопределить beginTrackingWithTouch: withEvent :, continueTrackingWithTouch: withEvent :, endTrackingWithTouch: withEvent :, and cancelTrackingWithEvent: методы отслеживания событий касания, происходящих в элементе управления. Вы можете использовать информацию отслеживания для выполнения дополнительных действий. ** Всегда используйте эти методы для отслеживания событий касания вместо методов, определенных классом UIResponder. ** –