ios 給NSTimer新增Block回撥版本建立方法
阿新 • • 發佈:2019-01-30
// // NSTimer+Convenience.h // NSTimerBlockDemo // // Created by huangyibiao on 15/3/25. // Copyright (c) 2015年 huangyibiao. All rights reserved. // #import <Foundation/Foundation.h> @interface NSTimer (Convenience) /** * 無引數無返回值Block */ typedef void (^HYBVoidBlock)(void); /** * 建立Timer---Block版本 * * @param interval 每隔interval秒就回調一次callback * @param repeats 是否重複 * @param callback 回撥block * * @return NSTimer物件 */ + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)interval repeats:(BOOL)repeats callback:(HYBVoidBlock)callback; /** * 建立Timer---Block版本 * * @param interval 每隔interval秒就回調一次callback * @param count 回撥多少次後自動暫停,如果count <= 0,則表示無限次,否則表示具體的次數 * @param callback 回撥block * * @return NSTimer物件 */ + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)interval count:(NSInteger)count callback:(HYBVoidBlock)callback; /** * 開始啟動定時器 */ - (void)fireTimer; /** * 暫停定時器 */ - (void)unfireTimer; @end
// // NSTimer+Convenience.m // NSTimerBlockDemo // // Created by huangyibiao on 15/3/25. // Copyright (c) 2015年 huangyibiao. All rights reserved. // #import "NSTimer+Convenience.h" @implementation NSTimer (Convenience) + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)interval repeats:(BOOL)repeats callback:(HYBVoidBlock)callback { return [NSTimer scheduledTimerWithTimeInterval:interval target:self selector:@selector(onTimerUpdateBlock:) userInfo:[callback copy] repeats:repeats]; } + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)interval count:(NSInteger)count callback:(HYBVoidBlock)callback { NSDictionary *userInfo = @{@"callback" : [callback copy], @"count" : @(count)}; return [NSTimer scheduledTimerWithTimeInterval:interval target:self selector:@selector(onTimerUpdateCountBlock:) userInfo:userInfo repeats:YES]; } + (void)onTimerUpdateBlock:(NSTimer *)timer { HYBVoidBlock block = timer.userInfo; if (block) { block(); } } + (void)onTimerUpdateCountBlock:(NSTimer *)timer { static NSUInteger currentCount = 0; NSDictionary *userInfo = timer.userInfo; HYBVoidBlock callback = userInfo[@"callback"]; NSNumber *count = userInfo[@"count"]; if (count.integerValue <= 0) { if (callback) { callback(); } } else { if (currentCount < count.integerValue) { currentCount++; if (callback) { callback(); } } else { currentCount = 0; [timer unfireTimer]; } } } - (void)fireTimer { [self setFireDate:[NSDate distantPast]]; } - (void)unfireTimer { [self setFireDate:[NSDate distantFuture]]; } @end
可以到github下載:https://github.com/632840804/NSTimerBlockDemo