美文网首页
一个方法实现---倒计时按钮

一个方法实现---倒计时按钮

作者: 捷风 | 来源:发表于2017-09-14 11:15 被阅读17次

倒计时功能会经常出现在项目中,通过给UIButton的类别中添加一个方法,在项目中初始化button后调用该方法,就可以很友好的实现倒计时功能了,使用的时候只需要传入一个参数(总时间),然后在方法的后面有两个block 的回调,分别回调当前倒计时和倒计时结束先来看看效果图:

倒计时按钮.gif

下面看看调用地方的代码:

#pragma mark ---开始倒计时点击事件
-(void)startAction{
    NSInteger time =8;
    [_endBt setTitle:[NSString stringWithFormat:@"%zd",time] forState:UIControlStateNormal];
    [_startBt startTime:time waitBlock:^(NSInteger remainTime) {
        DLog(@"%zd",remainTime);
        [_endBt setTitle:[NSString stringWithFormat:@"%zd",remainTime] forState:UIControlStateNormal];
    } finishBlock:^{
        DLog(@"finishBlock");
        [_endBt setTitle:@"倒计时结束" forState:UIControlStateNormal];
    }];
}

UIButton+CountDown.h

@interface UIButton (CountDown)

/**
 倒计时按钮
 
 @param timeout     总时间
 @param waitBlock   倒计时过程中可以再里面做一些操作
 @param finishBlock 完成时执行的block
 */
- (void)startTime:(NSInteger)timeout waitBlock:(void(^)(NSInteger remainTime))waitBlock finishBlock:(void(^)())finishBlock;

@end

UIButton+CountDown.m

@implementation UIButton (CountDown)

- (void)startTime:(NSInteger)timeout waitBlock:(void(^)(NSInteger remainTime))waitBlock finishBlock:(void(^)())finishBlock{
    __block NSInteger timeOut = timeout;
    
    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(timeOut <= 0){ //倒计时结束,关闭
            dispatch_source_cancel(_timer);
            dispatch_async(dispatch_get_main_queue(), ^{
                if (finishBlock){
                    finishBlock();
                }
                self.userInteractionEnabled = YES;
            });
        }else{
            dispatch_async(dispatch_get_main_queue(), ^{
                if (waitBlock){
                    waitBlock(timeOut);
                }
                self.userInteractionEnabled = NO;
            });
            timeOut--;
        }
    });
    dispatch_resume(_timer);
}

@end

相关文章

  • iOS 验证码倒计时

    /** 倒计时方法 在点击获取验证码按钮的方法里调用此方法即可实现, 需要在倒计时里修改按钮相关的请在此方法里yo...

  • RAC 实现按钮倒计时

    RAC 实现按钮倒计时

  • 倒计时组件:xz_CountDownButton - iOS 组

    首先定义一些常量 定义倒计时按钮状态enum 属性 实现方法 CCoundDownButton 使用 pod安装

  • 一个方法实现---倒计时按钮

    倒计时功能会经常出现在项目中,通过给UIButton的类别中添加一个方法,在项目中初始化button后调用该方法,...

  • 倒计时按钮

    给按钮加倒计时的代码 1、声明属性 2、在viewDidLoad中设置按钮初状态 3、在按钮触发方法中触发倒计时计...

  • 倒计时

    Requirements 实现按钮倒计时: 基于GCD的倒计时 github链接:https://github.c...

  • iOS快速实现一个保存记录的倒计时按钮

    iOS开发中在登录、注册、找回密码等页面经常需要实现倒计时按钮,但是很多情况下用户点击倒计时按钮开始倒计时之后,再...

  • IOS-音频录制

    实现思路: 在故事板中定义两个按钮,一个"按下录制"按钮,和"播放"按钮,"按下录制"按钮绑定两个方法:录音方法和...

  • 如何用按钮来实现图片上文字下的效果?

    自定义按钮,实现 自定义按钮,实现layoutSubViews方法调整按钮内部子控件的位置和尺寸

  • js中date倒计时

    获取倒计时之前,我们不妨先来看怎样获取当前时间吧!!! 获取倒计时 1、实现倒计时功能2、倒计时结束按钮可被点击,...

网友评论

      本文标题:一个方法实现---倒计时按钮

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