ios 给NSTimer添加Block回调版本创建方法

[objc]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. //  
  2. //  NSTimer+Convenience.h  
  3. //  NSTimerBlockDemo  
  4. //  
  5. //  Created by huangyibiao on 15/3/25.  
  6. //  Copyright (c) 2015年 huangyibiao. All rights reserved.  
  7. //  
  8.   
  9. #import <Foundation/Foundation.h>  
  10.   
  11. @interface NSTimer (Convenience)  
  12.   
  13. /** 
  14.  *  无参数无返回值Block 
  15.  */  
  16. typedef void (^HYBVoidBlock)(void);  
  17.   
  18. /** 
  19.  *  创建Timer---Block版本 
  20.  * 
  21.  *  @param interval 每隔interval秒就回调一次callback 
  22.  *  @param repeats  是否重复 
  23.  *  @param callback 回调block 
  24.  * 
  25.  *  @return NSTimer对象 
  26.  */  
  27. + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)interval  
  28.                                     repeats:(BOOL)repeats  
  29.                                    callback:(HYBVoidBlock)callback;  
  30.   
  31. /** 
  32.  *  创建Timer---Block版本 
  33.  * 
  34.  *  @param interval 每隔interval秒就回调一次callback 
  35.  *  @param count  回调多少次后自动暂停,如果count <= 0,则表示无限次,否则表示具体的次数 
  36.  *  @param callback 回调block 
  37.  * 
  38.  *  @return NSTimer对象 
  39.  */  
  40. + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)interval  
  41.                                     count:(NSInteger)count  
  42.                                    callback:(HYBVoidBlock)callback;  
  43.   
  44. /** 
  45.  *  开始启动定时器 
  46.  */  
  47. - (void)fireTimer;  
  48.   
  49. /** 
  50.  *  暂停定时器 
  51.  */  
  52. - (void)unfireTimer;  
  53.   
  54.   
  55. @end  


[objc]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. //  
  2. //  NSTimer+Convenience.m  
  3. //  NSTimerBlockDemo  
  4. //  
  5. //  Created by huangyibiao on 15/3/25.  
  6. //  Copyright (c) 2015年 huangyibiao. All rights reserved.  
  7. //  
  8.   
  9. #import "NSTimer+Convenience.h"  
  10.   
  11. @implementation NSTimer (Convenience)  
  12.   
  13. + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)interval  
  14.                                     repeats:(BOOL)repeats  
  15.                                    callback:(HYBVoidBlock)callback {  
  16.   return [NSTimer scheduledTimerWithTimeInterval:interval  
  17.                                           target:self  
  18.                                         selector:@selector(onTimerUpdateBlock:)  
  19.                                         userInfo:[callback copy]  
  20.                                          repeats:repeats];  
  21. }  
  22.   
  23. + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)interval  
  24.                                       count:(NSInteger)count  
  25.                                    callback:(HYBVoidBlock)callback {  
  26.   NSDictionary *userInfo = @{@"callback"     : [callback copy],  
  27.                              @"count"        : @(count)};  
  28.   return [NSTimer scheduledTimerWithTimeInterval:interval  
  29.                                           target:self  
  30.                                         selector:@selector(onTimerUpdateCountBlock:)  
  31.                                         userInfo:userInfo  
  32.                                          repeats:YES];  
  33. }  
  34.   
  35. + (void)onTimerUpdateBlock:(NSTimer *)timer {  
  36.   HYBVoidBlock block = timer.userInfo;  
  37.     
  38.   if (block) {  
  39.     block();  
  40.   }  
  41. }  
  42.   
  43. + (void)onTimerUpdateCountBlock:(NSTimer *)timer {  
  44.   static NSUInteger currentCount = 0;  
  45.     
  46.   NSDictionary *userInfo = timer.userInfo;  
  47.   HYBVoidBlock callback = userInfo[@"callback"];  
  48.   NSNumber *count = userInfo[@"count"];  
  49.     
  50.   if (count.integerValue <= 0) {  
  51.     if (callback) {  
  52.       callback();  
  53.     }  
  54.   } else {  
  55.     if (currentCount < count.integerValue) {  
  56.       currentCount++;  
  57.       if (callback) {  
  58.         callback();  
  59.       }  
  60.     } else {  
  61.       currentCount = 0;  
  62.         
  63.       [timer unfireTimer];  
  64.     }  
  65.   }  
  66. }  
  67.   
  68. - (void)fireTimer {  
  69.   [self setFireDate:[NSDate distantPast]];  
  70. }  
  71.   
  72. - (void)unfireTimer {  
  73.   [self setFireDate:[NSDate distantFuture]];  
  74. }  
  75.   
  76. @end  

可以到github下载: https://github.com/632840804/NSTimerBlockDemo



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值