Sur la base de réponses pour @Thiru et @ kapesoftware, je fait une catégorie Objective-C sur NSTimer utilisant des objets associés pour mettre en pause et reprendre la minuterie.
#import <objc/runtime.h>
@interface NSTimer (PausableTimer)
@property (nonatomic, retain) NSDate *pausedDate;
@property (nonatomic, retain) NSDate *nextFireDate;
-(void)pause;
-(void)resume;
@end
...
@implementation NSTimer (PausableTimer)
static char * kPausedDate = "pausedDate";
static char * kNextFireDate = "nextFireDate";
@dynamic pausedDate;
@dynamic nextFireDate;
-(void)pause {
self.pausedDate = [NSDate date];
self.nextFireDate = [self fireDate];
[self setFireDate:[NSDate distantFuture]];
}
-(void)resume
{
float pauseTime = -1*[self.pausedDate timeIntervalSinceNow];
[self setFireDate:[self.nextFireDate initWithTimeInterval:pauseTime sinceDate:self.nextFireDate]];
}
- (void)setPausedDate:(NSDate *)pausedDate
{
objc_setAssociatedObject(self, kPausedDate, pausedDate, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (NSDate *)pausedDate
{
return objc_getAssociatedObject(self, kPausedDate);
}
- (void)setNextFireDate:(NSDate *)nextFireDate
{
objc_setAssociatedObject(self, kNextFireDate, nextFireDate, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (NSDate *)nextFireDate
{
return objc_getAssociatedObject(self, kNextFireDate);
}
Il garde les choses en ordre et signifie que vous ne devez pas créer des variables ou des propriétés exemple juste pour interrompre et reprendre vos minuteries.
@fishcharlie le lien est rompu – Till