Delai dans une méthode

allianallian Membre
03:10 modifié dans API UIKit #1
Bonjour,
j'aimerais savoir comment créer un délai dans une de mes méthodes, je voudrais en effet que une partie de mon code s'execute et que la suite attende avant de commencer (ceci pour faire un décompte avant le début de la partie).

Pour le moment j'ai essayer de faire ceci :

<br />{<br />...<br />NSThread *monThread = [[NSThread alloc] initWithTarget:self selector:@selector(startGame) object:nil];<br />	[monThread start];<br />	//[self startGame];<br />	[super viewDidLoad];<br />	<br />}<br /><br />-(void)startGame {<br />	<br />	NSDate *future = [NSDate dateWithTimeIntervalSinceNow: 5.10 ];<br />	[NSThread sleepUntilDate:future];<br />}<br />


Ceci stoppe bien mon execution de code mais apres les timers que j'ai dans la méthode startGame() ne fonctionnent plus.

Quelqu'un aurait il une idée ?

Réponses

  • sekaijinsekaijin Membre
    03:10 modifié #2
    il y a super longtemps que je n'ai pas touché à  ce genre de chose mais dans ma mémoire
    la méthode s'exécute démarre un timer et rend la main.
    le timer arrivé à  échéance envoi un évènement
    qui est traité par une (ou plusieurs autres méthodes)
    cela permet à  l'application de rester active pendant l'attente

    A+JYT
  • allianallian Membre
    03:10 modifié #3
    Je crois comprendre ce que tu m'explique mais je n'arrive pas à  le mettre en pratique.

    J'ai essayé plusieurs choses :
    - récupérer la notification de fin du thread et lancer une nouvelle méthode une fois fini. ==> Probleme : les NSTimer dans ma méthode ne fonctionne toujours pas...

    -appelé ma méthode et modifier ses timers en les déclenchant après mon délai ==> Probleme : l'appli n'a plus la main et attend que le timer se déclenche pour continuer

    Quoi faire ? :(
  • AliGatorAliGator Membre, Modérateur
    03:10 modifié #4
    Ca m'a l'air d'être le bazooka pour tuer la mouche, ton truc...

    Pourquoi ne pas faire un [tt][self performSelector:@selector(startGame) withObject:nil afterDelay:2.0][/tt] pour qu'il appelle ta méthode startGame au bout de 2 secondes ?
    Ou sinon un NSTimer configuré pour durer 2 secondes (repeat:NO bien sûr) et qui appelle startGame à  la fin ?

    Le plus simple pour ton décompte c'est de faire un NSTimer de toute façon. Qui se déclenche toutes les secondes (repeat:YES). Avant de lancer ce timer, tu mets une variable d'instance NSUInteger à  disons 3 (nombre de secondes du décompte), et à  chaque fois que le timer se déclenche, tu décrémentes ce NSUInteger. Quand il arrive à  zéro, tu arrêtes (invalide) ton timer (tu n'en aura plus besoin le décompte est fini), puis appelle ta méthode startGame. Comme ça en plus avec cette méthode de déclencher ton timer toutes les secondes et d'avoir un décompte à  côté, ça te permet d'afficher le décompte dans l'interface de ton jeu.
  • allianallian Membre
    03:10 modifié #5
    En effet je connaissais pas cet appel :D

    Pour mon décompte en effet ça à  l'air d'être bien plus adapté. Je fais bien démarrer le jeu apres un décompte, me reste plus qu'à  l'afficher à  l'écran.

    Merci AliGator comme d'hab
Connectez-vous ou Inscrivez-vous pour répondre.