ОБНОВЛЕНИЕ: С оттенком стыда я обнаружил, что приказ не имеет никакого отношения к скорости постукивания. Я вызывал визуальный код перед вызовом super touchesEnded: withEvent, поэтому, если вы нажали действительно быстро, на дисплее никогда не будет возможности нарисовать подсвеченное состояние, прежде чем его снова закроют. Поскольку код, который фактически вызывал блокировку основного потока всего за несколько миллисекунд, выделенное состояние будет оставаться видимым до тех пор, пока основной поток не разблокируется снова, а если вы нажали действительно быстро, это выглядело так, как будто ничего не произошло вообще. Перемещение супер-вызова к вершине переопределенного метода исправило все это. Извините, если модератор увидит это сообщение, его можно удалить. позор
Эту проблему, должно быть, 1000 раз задавали в SO, но я не могу найти объяснение, соответствующее моей конкретной проблеме.
У меня есть подкласс UIButton с нестандартным дизайном. Конечно, дизайн достаточно индивидуален, поэтому я не могу просто использовать обычные setSomething:forControlState:
методы. Мне нужен другой цвет фона на ощупь, например, и некоторые значки, которые должны мигать.
Чтобы реализовать эти изменения представления, я (нелогично) поместил код дисплея в (A) touchesBegan:withEvent
и (Z) touchesEnded:withEvent:
, прежде чем вызывать их соответствующие супер методы. Кажется странным, но работает как задумано, или так сначала показалось.
После того, как реализация addTarget:action:forControlEvents
была использована для привязки UIControlEventTouchUpInside
к методу (X) itemTapped:
, я ожидаю, что эти методы всегда будут запускаться в порядке (A) (X) (Z). Однако, если вы нажмете на экран очень быстро (или мышь в симуляторе), они будут срабатывать в порядке (A) (Z) (X). Где (A) и (Z) следуют друг за другом в такой быстрой последовательности, что вся визуальная обратная связь для постукивания невидима. Это нежелательное поведение. Это также не может быть подходом, так как многие приложения требуют одинакового поведения, верно?
Так что мой вопрос к вам: что я делаю не так? Одна вещь, которую я предполагаю, состоит в том, что внешний вид кнопок не должен изменяться в touchesBegan:withEvent
и touchesEnded:withEvent
, но тогда где? Или я упускаю какой-то другой известный факт?
Спасибо за толчок,
Эрик-Поль.