Je développe l'application Stop Watch. Dans mon application, il y a deux boutons UIB, StartBtn
et StopBtn
, et j'utilise également NSTimer
.
Maintenant, je veux démarrer NSTimer
lorsque l'utilisateur clique sur StartBtn
et également arrêter lorsque vous cliquez sur StopBtn
.
Je sais que NSTimer
est arrêté par [MyTimerName invalidate];
mais je ne sais pas comment recommencer NSTimer
?
La classe NSTimer
est un peu délicate à utiliser; plutôt que de séparer la création/destruction du démarrage/arrêt, tout est roulé ensemble. En d'autres termes, le chronomètre démarre dès qu'il est créé et s'arrête dès qu'il est détruit.
Vous devez donc utiliser existence de l'objet NSTimer
comme indicateur pour indiquer s'il est en cours d'exécution; quelque chose comme ça:
// Private Methods
@interface MyClass ()
{
NSTimer *_timer;
}
- (void)_timerFired:(NSTimer *)timer;
@end
@implementation MyClass
- (IBAction)startTimer:(id)sender {
if (!_timer) {
_timer = [NSTimer scheduledTimerWithTimeInterval:1.0f
target:self
selector:@selector(_timerFired:)
userInfo:nil
repeats:YES];
}
}
- (IBAction)stopTimer:(id)sender {
if ([_timer isValid]) {
[_timer invalidate];
}
_timer = nil;
}
- (void)_timerFired:(NSTimer *)timer {
NSLog(@"ping");
}
Vous pouvez toujours utiliser le feu pour redémarrer un NStimer
[timer fire];
Pour l'arrêter:
[timer invalidate];
//remember to set timer to nil after calling invalidate;
timer = nil;
Vous pouvez démarrer la minuterie
#define kRefreshTimeInSeconds 1
NSTimer *myTimerName;
.
.
myTimerName = [NSTimer scheduledTimerWithTimeInterval: kRefreshTimeInSeconds
target:self
selector:@selector(handleTimer:)
userInfo:nil
repeats:YES];
Ensuite, la fonction déléguée:
-(void)handleTimer: (id) sender
{
//Update Values in Label here
}
Et pour arrêter Timer
-(void)stopTimer: (id) sender
{
if(myTimerName)
{
[myTimerName invalidate];
myTimerName = nil;
}
}