Je sais que je suis en retard pour cette fête. Mais je trouve que les gens n'ont pas mentionné le thread sleep. Si vous utilisez GCD pour appeler cette fonction. Vous pouvez utiliser :
NSThread sleepForTimeInterval:2.0f];
pour retarder le fil pendant 2 secondes.
[self changeText: @"A text"];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//Here your non-main thread.
[NSThread sleepForTimeInterval:2.0f];
dispatch_async(dispatch_get_main_queue(), ^{
//Here you returns to main thread.
[self changeText: @"Another text"];
});
});
Edit 2 (Feb 2015)
Je pense que le NSTimer est une excellente solution. Ma solution ne fait que donner une autre option pour atteindre l'objectif de NSTimer.
Veuillez lire : Comment utiliser NSTimer ?
[NSTimer scheduledTimerWithTimeInterval:2.0
target:self
selector:@selector(doSomethingWhenTimeIsUp:)
userInfo:nil
repeats:NO];
Dans la classe, vous avez besoin de cette méthode :
- (void) doSomethingWhenTimeIsUp:(NSTimer*)t {
// YES! Do something here!!
}
Edition 3 (mai 2016)
Dans Swift 2.0, vous pouvez utiliser cette méthode :
NSTimer.scheduledTimerWithTimeInterval(2.0,
target: self,
selector: "doSomethingWhenTimeIsUp:",
userInfo: nil,
repeats: false)
Elle crée une entité NSTimer et ajoute automatiquement le timer à la NSRunLoop associée au NSThread dans lequel le timer est créé.
Édition 4 (juin 2016) Dans Swift 2.2, la façon d'invoquer select est :
#selector(doSomethingWhenTimeIsUp(_:))
Donc, c'est quelque chose comme :
NSTimer.scheduledTimerWithTimeInterval(2.0,
target: self,
selector: #selector(doSomethingWhenTimeIsUp()),
userInfo: nil,
repeats: false)
Edit 5 (Oct 2016)
Dans Swift 3, la façon d'invoquer select est :
#selector(doSomethingWhenTimeIsUp)
Donc, c'est quelque chose comme :
Timer.scheduledTimer(timeInterval: 2.0,
target: self,
selector: #selector(doSomethingWhenTimeIsUp),
userInfo: nil,
repeats: false)
Ensuite, le func devrait ressembler à ceci :
@objc private func doSomethingWhenTimeIsUp(){
// Do something when time is up
}
Édition 6 (mai 2018) Sur Swift 4 nous pouvons faire comme ci-dessous.
let delaySeconds = 2.0
DispatchQueue.main.asyncAfter(deadline: .now() + delaySeconds) {
doSomethingWhenTimeIsUp()
}
Ensuite, le func devrait ressembler à ceci :
private func doSomethingWhenTimeIsUp(){
// Do something when time is up
}
0 votes
Duplication possible de Appeler sleep(5) ; et mettre à jour le champ de texte ne fonctionne pas