10
votes

Comment montrer le compte à rebours sur Uilabel sur iPhone?

J'ai un Uilabel et un uislider sur une vue. Je veux définir le temps de l'étiquette à l'aide du curseur.Range du curseur est 00:00:00 à 03:00:00. Moyens 3 heures. Et intervelez sur le curseur est de 0,5 minutes.Aussi comment montrer.Je veux que la minuterie fonctionne même si l'application est fermée.


0 commentaires

3 Réponses :


41
votes

Tout d'abord, il n'y a aucun moyen de conserver la minuterie en cours d'exécution après la fermeture de votre application. Les applications de fond ne sont tout simplement pas autorisées sur l'iPhone. Il existe des moyens de le simuler avec une minuterie (sauvegarder un horodatage lorsque l'application se ferme et vérifiez-la contre le moment où elle démarre), mais elle ne gérera pas le cas où votre minuterie s'épuise avant la démarrage de l'application. Up.

En ce qui concerne la mise à jour de l'Uilabel avec le compte à rebours, un NSTIMER fonctionnerait probablement. Quelque chose comme ça, en supposant que vous ayez une minuterie NSTIMER, UN INT SECONDSFTFT, et un nombre d'Uilabel dans votre classe: P>

Créer la minuterie: P>

-(void) updateCountdown {
    int hours, minutes, seconds;

    secondsLeft--;
    hours = secondsLeft / 3600;
    minutes = (secondsLeft % 3600) / 60;
    seconds = (secondsLeft %3600) % 60;
    countDownlabel.text = [NSString stringWithFormat:@"%02d:%02d:%02d", hours, minutes, seconds];
}


6 commentaires

Quelle est la valeur de secondesftft.


Ce serait le nombre de secondes que vous souhaitez que la minuterie soit exécutée, la configuration la plus probable d'autre que sur la base de la valeur de l'UISLIDER.


Comme Shawn l'a dit, vous ne pouvez pas conserver la minuterie en cours d'exécution après la fermeture de l'application, alors assurez-vous de garder une trace de l'heure de début lorsque votre application envoie l'uiapplicationWillterMinatination (je pense que c'est ça, je suis rouillé). La seule solution de contournement à une minuterie s'épuise lorsque l'application n'est pas exécutée consiste à utiliser la notification push. Mais cela peut être cher.


Merci shawn! Vous avez une question, comment tuer la minuterie? Merci encore.


Si vous invalendez la minuterie, il l'arrêtera.


Quelqu'un a une idée de comment appliquer cela avec des jours aussi?



2
votes

Ce code est faux.

timer = [NSTimer scheduledTimerWithTimeInterval: 1.0 target:self selector:@selector(updateCountdown) userInfo:nil repeats: YES];


0 commentaires

0
votes

Vous pouvez conserver votre minuterie en cours d'exécution lorsque votre application entre dans l'arrière-plan,

Comme @shawn Craver vous a dit que vous ne pouvez pas faire cela, mais vous pouvez le faire lorsque l'application entre dans l'arrière-plan ("non terminée") qui est un événement différent de l'application d'événement et avec cela, vous aurez besoin d'une gcd multithreading (grand expédition centrale).

Plaque Référez ce lien

Définissez une minuterie dans iOS


0 commentaires