Как я могу отложить вызов метода на 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ов …

  • UIButton внутри представления с UITapGestureRecognizer
  • Замена на устаревший размерWithFont: в iOS 7?
  • Соглашение об именах iPhone ivar
  • Загрузка изображений из фоновой темы с использованием блоков
  • Что мне нужно сделать, чтобы заставить Core Data автоматически переносить модели?
  • Проверка подлинности электронной почты на textField в iPhone sdk
  • Как вы вычисляете день года на определенную дату в Objective-C?
  • Как Apple знает, что вы используете частный API?
  • Формирование портретной ориентации при нажатии на альбомный режим.
  • Использование Swift CFunctionPointer для передачи обратного вызова API CoreMIDI
  • SplitView как приложение Facebook на iPhone
  • Давайте будем гением компьютера.