131 lines
4.6 KiB
Objective-C
131 lines
4.6 KiB
Objective-C
//
|
|
// 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
|