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

来源:互联网 发布:上海踩踏事件 知乎 编辑:程序博客网 时间:2024/05/24 07:26
////  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


0 0
原创粉丝点击