美文网首页
iOS Button 倒计时

iOS Button 倒计时

作者: 叫我周杰伦 | 来源:发表于2020-01-09 16:16 被阅读0次

实现思路:

创建按钮, 添加点击方法;

用NSTimer定时器, 每秒执行一次, 定时改变Button的title,改变Button的样式, 设置Button不可点击;

若倒计时结束, 定时器关闭, 并改变Button的样式, 可以点击;

代码如下:

在按钮的点击事件里调用该方法.

  [selfopenCountdown:5interval:^(NSIntegercurrentTime) {

              //设置按钮显示读秒效果

             [self.followButtonsetTitle:[NSStringstringWithFormat:@"%@(%zd)",confirmToFollow,currentTime]forState:UIControlStateNormal];

          }finish:^{

              //设置按钮的样式

              [self.followButton setTitle:confirmToFollow forState:UIControlStateNormal];

              //关注

              if(self.followButtonClickBlock){

                  self.followButtonClickBlock();

              }

          }];

#pragma mark-- 开启倒计时效果

-(void)openCountdown:(NSInteger)intervalinterval:(void(^)(NSIntegercurrentTime))currentIntervalfinish:(dispatch_block_t)finish{

    __blockNSIntegertime = interval;//倒计时时间

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    dispatch_source_t_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(time <=0){//倒计时结束,关闭

            dispatch_source_cancel(_timer);

            dispatch_async(dispatch_get_main_queue(), ^{

                if(finish){//设置按钮的样式

                    finish();

                }

            });

        }else{

            intseconds = time %60;

            dispatch_async(dispatch_get_main_queue(), ^{

                if(currentInterval){//设置按钮的样式

                    currentInterval(seconds);

                }

            });

            time--;

        }

    });

    dispatch_resume(_timer);

}

注意点:

我们在创建Button时, 要设置Button的样式:

当type为: UIButtonTypeCustom时 , 是读秒的效果.

当type为: 其他时, 是一闪一闪的效果.

相关文章

网友评论

      本文标题:iOS Button 倒计时

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