美文网首页
IOS-倒计时

IOS-倒计时

作者: 温学振 | 来源:发表于2017-10-10 18:16 被阅读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;
    }
    

    相关文章

      网友评论

          本文标题:IOS-倒计时

          本文链接:https://www.haomeiwen.com/subject/pylbyxtx.html