// // LXCountTimer.m // Elastagen // // Created by lianxiang on 2018/8/12. // Copyright © 2018年 jijia. All rights reserved. // #import "LXCountTimer.h" @interface LXCountTimer() @property(nonatomic,retain) dispatch_source_t timer; @property(nonatomic,retain) NSDateFormatter *dateFormatter; @end @implementation LXCountTimer -(void)countDownWithStratTimeStamp:(long)starTimeStamp finishTimeStamp:(long)finishTimeStamp completeBlock:(void (^)(NSInteger, NSInteger, NSInteger, NSInteger))completeBlock{ if (_timer == nil) { NSDate *finishDate =[self dateWithLong:finishTimeStamp]; NSDate *startDate = [self dateWithLong:starTimeStamp]; NSTimeInterval timerInterval =[finishDate timeIntervalSinceDate:startDate]; __block int timeout = timerInterval; if (timeout !=0) { dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue); dispatch_source_set_timer(_timer, dispatch_walltime(NULL, 0), 1.0*NSEC_PER_SEC, 0);//每秒执行 dispatch_source_set_event_handler(_timer, ^{ if (timeout<=0) { //记时结束, 关闭 dispatch_source_cancel(self->_timer); self->_timer = nil; dispatch_async(dispatch_get_main_queue(), ^{ completeBlock(0,0,0,0); }); }else{ int days = (int)(timeout/(3600*24)); int hours = (int)((timeout-days*24*3600)/3600); int minute = (int)(timeout-days*24*3600-hours*3600)/60; int second = timeout-days*24*3600-hours*3600-minute*60; dispatch_async(dispatch_get_main_queue(), ^{ completeBlock(days,hours,minute,second); }); timeout--; } }); dispatch_resume(_timer); } } } -(void)countDownWithtimerInterval:(NSTimeInterval)timerInterval completeBlock:(void (^)(NSInteger, NSInteger, NSInteger, NSInteger))completeBlock{ if (_timer == nil) { __block int timeout = timerInterval; if (timeout !=0) { dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue); dispatch_source_set_timer(_timer, dispatch_walltime(NULL, 0), 1.0*NSEC_PER_SEC, 0);//每秒执行 dispatch_source_set_event_handler(_timer, ^{ if (timeout<=0) { //记时结束, 关闭 dispatch_source_cancel(self->_timer); self->_timer = nil; dispatch_async(dispatch_get_main_queue(), ^{ completeBlock(0,0,0,0); }); }else{ int days = (int)(timeout/(3600*24)); int hours = (int)((timeout-days*24*3600)/3600); int minute = (int)(timeout-days*24*3600-hours*3600)/60; int second = timeout-days*24*3600-hours*3600-minute*60; dispatch_async(dispatch_get_main_queue(), ^{ completeBlock(days,hours,minute,second); }); timeout--; } }); dispatch_resume(_timer); } } } -(void)countDownWithPER_SECBlock:(void (^)(void))PER_SECBlock{ if (_timer==nil) { dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue); dispatch_source_set_timer(_timer,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0); //每秒执行 dispatch_source_set_event_handler(_timer, ^{ dispatch_async(dispatch_get_main_queue(), ^{ PER_SECBlock(); }); }); dispatch_resume(_timer); } } -(void)destoryTimer{ if (_timer) { dispatch_source_cancel(_timer); _timer = nil; } } -(void)dealloc{ NSLog(@"%s dealloc",object_getClassName(self)); } -(NSDate *)dateWithLong:(long)longValue{ long value = longValue; NSNumber *time = [NSNumber numberWithLong:value]; //转换成NSTimeInterval NSTimeInterval nsTimeInterval = [time longValue]; NSDate *date = [[NSDate alloc] initWithTimeIntervalSince1970:nsTimeInterval]; return date; } @end