Как я могу отложить вызов метода на 1 секунду?

Есть ли простой способ задержать вызов метода в течение 1 секунды?

У меня есть UIImageView который реагирует на событие касания. Когда обнаружено касание, некоторые анимации происходят в приложении. Через одну секунду я хочу вызвать другой метод. В этом случае я не могу использовать селектор animationDidStop .

 performSelector:withObject:afterDelay: 

Ссылка на документ

Вы также можете использовать блок

 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ [object method]; }); 

Большую часть времени вы захотите использовать dispatch_get_main_queue, хотя, если в этом методе нет интерфейса, вы можете использовать глобальную очередь .

Редактировать:

Версия Swift 3:

 DispatchQueue.main.asyncAfter(deadline: .now() + 1) { object.method() } 

В равной степени DispatchQueue.global().asyncAfter(... также может быть хорошим вариантом.

Лучший способ сделать это:

 [self performSelector:@selector(YourFunctionName) withObject:(can be Self or Object from other Classes) afterDelay:(Time Of Delay)]; 

вы также можете передать nil как с параметромObject.

пример :

 [self performSelector:@selector(subscribe) withObject:self afterDelay:3.0 ]; 

Есть уже много ответов, и все они правильны. Если вы хотите использовать dispatch_after вы должны искать fragment, который включен в Code Snippet Library fragmentа Code Snippet Library в правом нижнем углу (где вы можете выбрать элементы UI ).

введите описание изображения здесь

Поэтому вам просто нужно вызвать этот fragment, написав отправку кода:

введите описание изображения здесь

Вы можете использовать селектор выполнения после того, как метод задержки на 0,1 с вызывается для этого следующего кода для этого.

 [self performSelector:@selector(InsertView) withObject:nil afterDelay:0.1]; 

Вы также можете:

 [UIView animateWithDuration:1.0 animations:^{ self.view.alpha = 1.1; /* Some fake chages */ } completion:^(BOOL finished) { NSLog(@"A second lapsed."); }]; 

В этом случае вам нужно подделать некоторые изменения в какое-то представление, чтобы заставить анимацию работать. Это действительно хак, но я люблю блок-материал. Или заверните @mcfedr ответ ниже.


 waitFor(1.0, ^ { NSLog(@"A second lapsed"); }); 

 typedef void (^WaitCompletionBlock)(); void waitFor(NSTimeInterval duration, WaitCompletionBlock completion) { dispatch_after(dispatch_time(DISPATCH_TIME_NOW, duration * NSEC_PER_SEC), dispatch_get_main_queue(), ^ { completion(); }); } 

Вы можете сделать это

 [self performSelector:@selector(MethodToExecute) withObject:nil afterDelay:1.0 ]; 

Swift 2.x

 let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(1 * Double(NSEC_PER_SEC))) dispatch_after(delayTime, dispatch_get_main_queue()) { print("do some work") } 

Swift 3.x – & – Swift 4

 DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { print("do some work") } 

Существует решение Swift 3 из проверенного решения:

 self.perform(#selector(self.targetMethod), with: self, afterDelay: 1.0) 

И есть метод

 @objc fileprivate func targetMethod(){ } 

Использование в Swift 3

 perform(, with: , afterDelay:  

ПРИМЕЧАНИЕ. Это приостановит весь stream, а не только один метод.
Сделать вызов для ожидания / ожидания / остановки за 1000 мс перед вызовом вашего метода?

 Sleep(1000); // does nothing the next 1000 mSek Methodcall(params); // now do the real thing 

Изменить: приведенный выше ответ относится к общему вопросу: «Как я могу отложить вызов метода на 1 секунду?», На который был задан вопрос во время ответа (напомните, что ответ был получен в течение 7 минут после исходного вопроса: )). В то время не было информации о языке, поэтому любезно прекратите судить о правильном способе использования сна i XCode и отсутствии classов …

  • Как добавить userInfo в UIAlertView?
  • Как использовать CaptiveNetwork для получения текущего имени точки доступа Wi-Fi
  • Как создать одноэлементный class в объекте C
  • iOS 5: Как преобразовать Emoji в символ Юникода?
  • Как установить получателей для UIActivityViewController в iOS 6?
  • Как я могу заставить UITextField двигаться вверх, когда клавиатура присутствует?
  • Округлые углы только на вершине UIView
  • Как я могу получить точное время, например, в миллисекундах в Objective-C?
  • как правильно использовать insertRowsAtIndexPaths?
  • NULL против нуля в Objective-C
  • applicationWillEnterForeground против applicationDidBecomeActive, applicationWillResignActive vs. applicationDidEnterBackground
  • Interesting Posts

    Как уменьшить числа из rand ()?

    Настройка стиля UITableViewCell при использовании iOS 6 UITableView dequeueReusableCellWithIdentifier: forIndexPath:

    Windows (с использованием загрузки UEFI на GPT-диске) больше не будет загружаться после добавления жесткого диска MBR

    Как использовать nircmd.exe и установить имя файла% ~ nF в пакетном режиме для цикла

    Ошибка: «Указанное выражение LINQ содержит ссылки на запросы, связанные с различными контекстами»

    Понимание алгоритма «медианы медианов»

    Как настроить IP-адрес окон 7 и windows xp через беспроводной маршрутизатор для создания сетей?

    Java SecurityException: информация подписчика не соответствует

    В Visual Studio нет cl.exe

    Можно ли заполнить массив номерами строк, которые соответствуют определенным критериям без цикла?

    Использует ли Chrome другой DNS-сервер из ОС?

    Как сделать блок submitP () метода ThreadPoolExecutor, если он насыщен?

    Группировка по значению объекта, подсчет, а затем установка группового ключа с помощью максимального атрибута объекта

    Вторая установка Win7x64 на GPT не выполняется

    как установить выходное изображение, используйте com.android.camera.action.CROP

    Давайте будем гением компьютера.