ios简单的倒计时实现

效果图


/**

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

 *  这里测试用

 *  @return 格式为年-月-日 时分秒

 */

-(NSString*)getyyyymmdd{

    NSDate *now = [NSDate date];

    NSDateFormatter *formatDay = [[NSDateFormatter alloc] init];


    NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh"];

    [formatDaysetLocale:locale];


    formatDay.dateFormat = @"yyyy-MM-dd HH:mm:ss";

    NSString*dayStr = [formatDaystringFromDate:now];


    returndayStr;


}

- (void)startaaaa {

    NSDateFormatter *dateFormatter=[[NSDateFormatter alloc] init];

 //注意时区

    NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh"];

    [dateFormattersetLocale:locale];


    [dateFormattersetDateFormat:@"yyyy-MM-dd HH:mm:ss"];


    NSDate*endDate = [dateFormatterdateFromString:[selfgetyyyymmdd]];

    NSDate *endDate_tomorrow = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:([endDate timeIntervalSinceReferenceDate] + 30)]; //24*3600

    NSDate*startDate = [NSDatedate];

    NSTimeIntervaltimeInterval =[endDate_tomorrowtimeIntervalSinceDate:startDate];


    if(_timer==nil) {

        __blockinttimeout = timeInterval;//倒计时时间


        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.dayLB.text=@"";

                        self.hoursLB.text=@"00";

                        self.fenLB.text=@"00";

                        self.miaoLB.text=@"00";

                        self.dayLB.hidden=YES;;

                        self.hoursLB.hidden=YES;;

                        self.fenLB.hidden=YES;;

                        self.miaoLB.hidden=YES;;

                      //  self.imageIV.image = [UIImage imageNamed:@"vipTry_no"];

                    });

                }else{

                    intdays = (int)(timeout/(3600*24));

                    if(days==0) {

                        //通知主线程刷新

                        dispatch_async(dispatch_get_main_queue(), ^{

                            //回调或者说是通知主线程刷新,

                             self.dayLB.text=@"00";

                        });



                    }

                    inthours = (int)((timeout-days*24*3600)/3600);

                    intminute = (int)(timeout-days*24*3600-hours*3600)/60;

                    intsecond = timeout-days*24*3600-hours*3600-minute*60;

                    dispatch_async(dispatch_get_main_queue(), ^{

                         self.imageIV.image= [UIImageimageNamed:@"vipTry_yes"];

                        if(days==0) {

                            self.dayLB.text=@"00";

                        }else{

                            self.dayLB.text= [NSStringstringWithFormat:@"0%d",days];

                        }

                        if(hours<10) {

                            self.hoursLB.text= [NSStringstringWithFormat:@"0%d",hours];

                        }else{

                            self.hoursLB.text= [NSStringstringWithFormat:@"%d",hours];

                        }

                        if(minute<10) {

                            self.fenLB.text= [NSStringstringWithFormat:@"0%d",minute];

                        }else{

                            self.fenLB.text= [NSStringstringWithFormat:@"%d",minute];

                        }

                        if(second<10) {

                            self.miaoLB.text= [NSStringstringWithFormat:@"0%d",second];

                        }else{

                            self.miaoLB.text= [NSStringstringWithFormat:@"%d",second];

                        }


                    });

                    timeout--;

                }

            });

            dispatch_resume(_timer);

        }

    }


}

你可能感兴趣的:(ios简单的倒计时实现)