Как я могу отложить вызов метода на 1 секунду?
Есть ли простой способ задержать вызов метода в течение 1 секунды?
У меня есть UIImageView
который реагирует на событие касания. Когда обнаружено касание, некоторые анимации происходят в приложении. Через одну секунду я хочу вызвать другой метод. В этом случае я не могу использовать селектор animationDidStop
.
- как зарегистрировать приложение, чтобы открыть файл pdf в моем приложении в ipad
- Можно ли перепроектировать мое приложение iPhone?
- Круглое двойное значение до 2 знаков после запятой
- Как перехватить ссылку на ссылку в UITextView?
- AVAudioPlayer не воспроизводит звук
- Заголовок Swift для Objective-C, не созданный в Xcode 6
- `` соглашение
- Преобразование NSString даты в NSDate
- Как установить плагин Xcode для автоматического форматирования кода
- Как обнаружить паузу во вводе для UISearchBar / UITextField?
- Objective-c iPhone-процент кодирует строку?
- Нарисуйте часть круга
- Почему UINavigationBar крадет события касания?
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:
ПРИМЕЧАНИЕ. Это приостановит весь stream, а не только один метод.
Сделать вызов для ожидания / ожидания / остановки за 1000 мс перед вызовом вашего метода?
Sleep(1000); // does nothing the next 1000 mSek Methodcall(params); // now do the real thing
Изменить: приведенный выше ответ относится к общему вопросу: «Как я могу отложить вызов метода на 1 секунду?», На который был задан вопрос во время ответа (напомните, что ответ был получен в течение 7 минут после исходного вопроса: )). В то время не было информации о языке, поэтому любезно прекратите судить о правильном способе использования сна i XCode и отсутствии classов …