У меня есть приложение, которое, когда пользователь прикасается к определенному объекту, запускаю селектор через задержку. Я не уверен, что хочу или нуждаюсь в задержке, но не уверен в лучшей практике, может быть, в очереди? Во всяком случае, вот что мне нужно, независимо от того, что у меня есть сейчас.Соответствующий способ вызова и отмены выбора в Objective-c?
ЧТО Я теперь
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(doSomething) object:self];
[self performSelector:@selector(doSomething) withObject:nil afterDelay:2.0];
Когда пользователь прикасается определенный объект Мне нужно стартовое метод, но, если он/она снова касается объекта, я хочу, чтобы не вызвать метод.
Используйте случай # 1:
- прикосновений пользователя объекта
- Пользователь ничего не делает в течение 2 секунд
- вызова селектор
Используйте случай # 2:
- Пользователь касается объекта, то
- прикосновения пользователя объекта .5 секунд (таким образом отменить вызов селектора)
- прикосновения пользователя объекта .3 секунд (таким образом отменить вызов селектора)
- прикосновения пользователя объекта .9 секунд (таким образом отменить вызов селектора)
- Пользователь ничего не трогать в течение 2-х секунд
- селекторных вызовов
Если чувствуете, как performSelector
и cancelPrevious
являются Hacky. Должен ли я использовать какую-то очередь и затем очищать очередь каждый раз, когда пользователь снова коснется?
Или использовать таймер и просто перезапускать таймер каждый раз, когда пользователь его касается?
Хотя я полагаю, что таймер - это то, что делает peformselector под ним. – jdog
Я предлагаю вам использовать _timer_ вместе с некоторым _boolean flag_. Этот метод тригеррован через две секунды, то есть когда таймер выключается. – GoGreen
Да, вы правы. Используйте флаг boolean, который переключает его значение в каждом клике. и выполнить действие в методе, только если флаг имеет значение true. – GoGreen