iOS开发倒计时按钮

2019-09-27  本文已影响0人  路边的风景呢

这里做一下记录

//倒计时时间 - 60S

        __blockNSIntegertimeOut =59;

        self.timeOut= timeOut;

        //执行队列

        dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

        //计时器 -》 dispatch_source_set_timer自动生成

        dispatch_source_ttimer =dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER,0,0, queue);

        dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC, 0 * NSEC_PER_SEC);

        dispatch_source_set_event_handler(timer, ^{

            if(timeOut <=0) {

                dispatch_source_cancel(timer);

                //主线程设置按钮样式

                dispatch_async(dispatch_get_main_queue(), ^{

                    // 倒计时结束

                    [CodeBtnsetTitle:@"重发验证码"forState:UIControlStateNormal];

                    [CodeBtnsetTitleColor:RGBCOLOR(79, 139, 244) forState:UIControlStateNormal];

                    [CodeBtnsetEnabled:YES];

                    [CodeBtnsetUserInteractionEnabled:YES];

                });

            }else{

                //开始计时

                //剩余秒数 seconds

                NSIntegerseconds = timeOut %60;

                NSString*strTime = [NSStringstringWithFormat:@"%.1ld", seconds];

                //主线程设置按钮样式

                dispatch_async(dispatch_get_main_queue(), ^{

                    [UIViewbeginAnimations:nilcontext:nil];

                    [UIViewsetAnimationDuration:1.0];

                    NSString*title = [NSStringstringWithFormat:@"%@S",strTime];

                    [CodeBtnsetTitle:titleforState:UIControlStateNormal];

                    //              [yourButton.titleLabel setTextAlignment:NSTextAlignmentRight];

                    // 设置按钮title居中 上面注释的方法无效

                    [CodeBtnsetContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter];

                    [CodeBtnsetTitleColor:RGBCOLOR(79, 139, 244) forState:UIControlStateNormal];

                    [UIViewcommitAnimations];

                    //计时器间不允许点击

                    [CodeBtnsetUserInteractionEnabled:NO];

                });

                timeOut--;

            }

        });

        dispatch_resume(timer);

上一篇下一篇

猜你喜欢

热点阅读