// // NSTimer+AFSoundManager.m // AFSoundManager-Demo // // Created by Alvaro Franco on 10/02/15. // Copyright (c) 2015 AlvaroFranco. All rights reserved. // #import "NSTimer+AFSoundManager.h" #import @implementation NSTimer (AFSoundManager) +(id)scheduledTimerWithTimeInterval:(NSTimeInterval)inTimeInterval block:(void (^)())inBlock repeats:(BOOL)inRepeats { void (^block)() = [inBlock copy]; id ret = [self scheduledTimerWithTimeInterval:inTimeInterval target:self selector:@selector(jdExecuteSimpleBlock:) userInfo:block repeats:inRepeats]; return ret; } +(id)timerWithTimeInterval:(NSTimeInterval)inTimeInterval block:(void (^)())inBlock repeats:(BOOL)inRepeats { void (^block)() = [inBlock copy]; id ret = [self timerWithTimeInterval:inTimeInterval target:self selector:@selector(jdExecuteSimpleBlock:) userInfo:block repeats:inRepeats]; return ret; } +(void)jdExecuteSimpleBlock:(NSTimer *)inTimer { if([inTimer userInfo]) { void (^block)() = (void (^)())[inTimer userInfo]; block(); } } static NSString *const NSTimerPauseDate = @"NSTimerPauseDate"; static NSString *const NSTimerPreviousFireDate = @"NSTimerPreviousFireDate"; -(void)pauseTimer { objc_setAssociatedObject(self, (__bridge const void *)(NSTimerPauseDate), [NSDate date], OBJC_ASSOCIATION_RETAIN_NONATOMIC); objc_setAssociatedObject(self, (__bridge const void *)(NSTimerPreviousFireDate), self.fireDate, OBJC_ASSOCIATION_RETAIN_NONATOMIC); self.fireDate = [NSDate distantFuture]; } -(void)resumeTimer { NSDate *pauseDate = objc_getAssociatedObject(self, (__bridge const void *)NSTimerPauseDate); NSDate *previousFireDate = objc_getAssociatedObject(self, (__bridge const void *)NSTimerPreviousFireDate); const NSTimeInterval pauseTime = -[pauseDate timeIntervalSinceNow]; self.fireDate = [NSDate dateWithTimeInterval:pauseTime sinceDate:previousFireDate]; } @end