IOS-倒计时

2017-10-10  本文已影响12人  温学振
@interface ViewController ()
{
    dispatch_source_t _timer;
}
    
@property (strong, nonatomic)  UILabel *dayLabel;
@property (strong, nonatomic)  UILabel *hourLabel;
@property (strong, nonatomic)  UILabel *minuteLabel;
@property (strong, nonatomic)  UILabel *secondLabel;

@end
@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

在viewdidload里创建label

UILabel *llabel = [[UILabel alloc] initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width/2-75, 200, 150, 30)];
llabel.text = @"距离一周结束只有:";
llabel.textAlignment = NSTextAlignmentCenter;
llabel.textColor = [UIColor redColor];
[self.view addSubview:llabel];

self.dayLabel = [[UILabel alloc] initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width/2-75, 250, 30, 30)];
self.dayLabel.textColor = [UIColor whiteColor];
self.dayLabel.textAlignment = NSTextAlignmentCenter;
self.dayLabel.backgroundColor = [UIColor blackColor];
[self.view addSubview:self.dayLabel];

self.hourLabel = [[UILabel alloc] initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width/2+40-75, 250, 30, 30)];
self.hourLabel.textColor = [UIColor whiteColor];
self.hourLabel.textAlignment = NSTextAlignmentCenter;
self.hourLabel.backgroundColor = [UIColor blackColor];
[self.view addSubview:self.hourLabel];

self.minuteLabel = [[UILabel alloc] initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width/2+80-75, 250, 30, 30)];
self.minuteLabel.textColor = [UIColor whiteColor];
self.minuteLabel.textAlignment = NSTextAlignmentCenter;
self.minuteLabel.backgroundColor = [UIColor blackColor];

[self.view addSubview:self.minuteLabel];

self.secondLabel = [[UILabel alloc] initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width/2+120-75, 250, 30, 30)];
self.secondLabel.textColor = [UIColor whiteColor];
self.secondLabel.textAlignment = NSTextAlignmentCenter;
self.secondLabel.backgroundColor = [UIColor blackColor];
[self.view addSubview:self.secondLabel];

获取从现在到一周后的总秒数

    NSDateFormatter *dateFormatter=[[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy-MM-dd"];
    
    NSDate *endDate = [dateFormatter dateFromString:[self getyyyymmdd]];
    
    NSDate *endDate_week = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:([endDate timeIntervalSinceReferenceDate] + (24*3600)*5)];
    NSDate *startDate = [NSDate date];
    NSTimeInterval timeInterval =[endDate_week timeIntervalSinceDate:startDate];

做计算

    if (_timer==nil) {
        __block int timeout = timeInterval; //倒计时时间
        NSLog(@"timeout:%d",timeout);
        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(_timer);
                    _timer = nil;
                    dispatch_async(dispatch_get_main_queue(), ^{
                        self.dayLabel.text = @"回家";
                        self.hourLabel.text = @"打游";
                        self.minuteLabel.text = @"戏吃";
                        self.secondLabel.text = @"东西";
                    });
                }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(), ^{
                        if (days==0) {
                            self.dayLabel.text = @"0天";
                        }else{
                            self.dayLabel.text = [NSString stringWithFormat:@"%d天",days];
                        }
                        if (hours<10) {
                            self.hourLabel.text = [NSString stringWithFormat:@"0%d",hours];
                        }else{
                            self.hourLabel.text = [NSString stringWithFormat:@"%d",hours];
                        }
                        if (minute<10) {
                            self.minuteLabel.text = [NSString stringWithFormat:@"0%d",minute];
                        }else{
                            self.minuteLabel.text = [NSString stringWithFormat:@"%d",minute];
                        }
                        if (second<10) {
                            self.secondLabel.text = [NSString stringWithFormat:@"0%d",second];
                        }else{
                            self.secondLabel.text = [NSString stringWithFormat:@"%d",second];
                        }
                        
                    });
                    timeout--;
                }
            });
            dispatch_resume(_timer);
        }
    }
    
    
}

获取当天的年月日的字符串

-(NSString *)getyyyymmdd{
    NSDate *now = [NSDate date];
    NSDateFormatter *formatDay = [[NSDateFormatter alloc] init];
    formatDay.dateFormat = @"yyyy-MM-dd";
    NSString *dayStr = [formatDay stringFromDate:now];
    
    return dayStr;
}
上一篇 下一篇

猜你喜欢

热点阅读