Je veux changer le UILabel
mon UILabel
après 2 secondes.
J'ai essayé de régler le UILabel
mon UILabel
sur "Un text" , et j'utilise sleep(2)
pour enfin changer le text en "Another text" .
Mais sleep(2)
ne fait que geler l'application et "Another text" est défini sans afficher "A text" pendant 2 secondes.
Comment puis-je afficher "Un text" pendant 2 secondes, puis afficher "Un autre text" ?
Vous pouvez utiliser
[self performSelector:@selector(changeText:) withObject:text afterDelay:2.0];
ou si vous voulez l'afficher périodiquement, vérifiez la class NSTimer
.
Je sais que je suis en retard à cette fête. Mais j'ai trouvé que les gens n'ont pas mentionné le sumil du fil. 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"]; }); });
Je pense que le NSTimer est une excellente solution. Ma solution juste donner une autre option pour atteindre l'objective de NSTimer.
Veuillez lire: Comment utiliser NSTimer?
[NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(doSomethingWhenTimeIsUp:) userInfo:nil repeats:NO];
Dans la class, vous avez besoin de cette méthode:
- (void) doSomethingWhenTimeIsUp:(NSTimer*)t { // YES! Do something here!! }
Dans Swift 2.0, vous pouvez utiliser cette méthode:
NSTimer.scheduledTimerWithTimeInterval(2.0, target: self, selector: "doSomethingWhenTimeIsUp:", userInfo: nil, repeats: false)
Il crée une entité NSTimer et ajoute automatiquement le temporisateur au NSRunLoop associé au NSThread dans lequel le temporisateur est créé.
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)
Dans Swift 3, le moyen 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, la fonction devrait ressembler à ceci:
@objc private func doSomethingWhenTimeIsUp(){ // Do something when time is up }
Grand Central Dispatch dispose d'une fonction d'assistance dispatch_after()
pour effectuer des opérations après un timeout qui peut être très utile. Vous pouvez spécifier la durée d'attente avant l'exécution et l'instance dispatch_queue_t
à exécuter. Vous pouvez utiliser dispatch_get_main_queue()
pour exécuter sur le thread principal (UI).
double delayInSeconds = 2.0; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ // do something });
Dans Swift 3 , l'exemple ci-dessus peut être écrit comme:
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { // do something }
Vous pouvez utiliser NSTimer
, comme ça –
[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(updateLabel:) userInfo:nil repeats:YES];
Définissez une autre méthode updateLabel
et effectuez la mise à jour ici. Définissez votre timeInterval pour répondre à vos besoins …
Le réglage des repeats
sur YES
permet également de s'assurer que ce sélecteur est exécuté toutes les 0,5 secondes (dans le cas ci-dessus).
Vous pouvez accomplir ceci avec une timer, par exemple
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:4.0 target:self selector:@selector(eventToFire:) userInfo:nil repeats:YES]; // Fire every 4 seconds. ... - (void)eventToFire:(NSTimer*)timer { // Do Something }
C'est parce que la vue n'est pas mise à jour jusqu'à la fin du cycle. Au lieu d'utiliser sleep, essayez d'utiliser NSTimer pour définir une heure spécifique de mise à jour de la vue.
Vous devez utiliser une timer. Utiliser le sumil arrêtera tout votre programme. Vérifiez NSTimer