iOS: несовместимое поведение с событием UIControlEventTouchUpOutside UIButton - PullRequest
4 голосов
/ 21 июля 2011

Я хочу получить двойную функциональность от UIButton.

Когда пользователь нажимает кнопку вниз, я хочу, чтобы она немедленно вызывала поведение A

Но если пользователь затем перед тем, как отпустить кнопку, проведет пальцем за пределы кнопки, я также хотел бы вызвать поведение B. при отпускании.

Итак,

        [presetButton addTarget: self 
                         action: @selector( presetButtonHit: )
               forControlEvents: UIControlEventTouchDown ];  

        [presetButton addTarget: self 
                         action: @selector( presetButtonSwipe: )
               forControlEvents: UIControlEventTouchUpOutside ];  

В качестве контрольного примера я просто запишу 'A' или 'B' из соответствующих методов действия.

А всегда получает удар правильно.

Однако B является спорадическим. Я могу методично провести пальцем вниз, хорошо перетащить за пределы кнопки, подождать секунду и отпустить. И обычно это не огонь. В качестве альтернативы, если я сделаю быстрый щелчок, он с большей вероятностью выстрелит. Но все равно 50-50.

Все, что у меня есть, это UIView с фоновым изображением и шестью кнопками.

Что я могу сделать, чтобы отследить это?

Я бы предпочел разобраться с этим, чем бездельничать, отслеживая прикосновения вверх и вниз; но если я должен сделать это, есть ли чистый способ? Из того, что я вижу, это будет королевская PITA, и мне нужно будет выяснить, ударили ли касания вверх / вниз до того, как нажали касание моей кнопки вверх / вниз, установили флаги и т. Д.

1 Ответ

2 голосов
/ 21 июля 2011

Это дубликат Странное поведение UIButton: это нормально? , но я рекомендую сохранить его, потому что заголовок вопроса хорошо сформулирован.

Когда мой палец опускается на кнопку, изображение темнеет

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

это типичное поведение для «отмены касания путем перемещения пальца достаточно далеко, прежде чем отпустить»

если вы отпустите палец внутри этой зоны, он разожжет касание внутри. сим для снаружи.

выглядит так, как будто Apple не ожидала, что кто-то использует эти методы для получения двойной функциональности от UIButton.

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

Но вот элегантный способ:

http://sree.cc/iphone/handling-touche-events-for-uibuttons-in-iphone

UIControl имеет методы для определения начала / перемещения / остановки перетаскивания. Вы можете переопределить их и получить координаты экрана.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...