美文网首页iOS学习开发
iOS快速实现一个保存记录的倒计时按钮

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

作者: SmileZXLee | 来源:发表于2019-05-22 20:53 被阅读0次

    iOS开发中在登录、注册、找回密码等页面经常需要实现倒计时按钮,但是很多情况下用户点击倒计时按钮开始倒计时之后,再次进入页面,又可以再次点击,倒计时记录不会保留,虽然一般情况下服务端会再次校验,但是我们可以实现得更加严谨。

    ZXCountDownView 支持自动保存倒计时记录,即使退出当前控制器,重启App,倒计时仍然保留,支持多个不同控制器共用一个倒计时记录,例如登录、注册、找回密码页面共用一个倒计时记录,点击任意一个按钮倒计时记录将实时同步。


    ZXCountDownView

    安装

    通过CocoaPods安装

    pod 'ZXCountDownView'
    

    手动导入

    • 将ZXCountDownView拖入项目中。

    导入头文件

    #import "ZXCountDownView.h"
    

    效果图


    Demo

    • 设置一个倒计时Label,且自动记录倒计时进度:
    //第一个参数40即为倒计时时间为40秒,第二个参数mark用于标记区分当前倒计时任务和其他倒计时任务,确保与其他任务不重名即可,block第一个参数即为剩余秒数,block返回值即为显示在Label上的文字。(此处实现了一个倒计时40秒,且显示”还剩40、39、38...秒哦“的Label)
    [self.scheduleStoreLabel setCountDown:40 mark:@"ScheduleStoreLabel" resTextFormat:^NSString *(long remainSec) {
        if(remainSec > 30){
            weakSelf.scheduleStoreLabel.backgroundColor = [UIColor orangeColor];
        }else{
            weakSelf.scheduleStoreLabel.backgroundColor = [UIColor redColor];
        }
        //显示剩余几分几秒
        NSString *timeformatStr = [NSDate getDateStrWithSec:remainSec dateFormat:@"mm分ss秒"];
        return timeformatStr;
    }];
    //开始倒计时
    [self.scheduleStoreLabel startCountDown];
    
    • 设置一个点击获取验证码的Button,且自动记录倒计时进度:
    //此处实现了一个倒计时20秒,且显示“还剩20、19、18...秒后重试”的Btn,且退出重新进入当前控制器或重启App不受影响。
    [self.getCheckCodeBtn enableAutoCountDown:20 mark:@"GetCheckCodeBtn" resTextFormat:^NSString *(long remainSec) {
        return [NSString stringWithFormat:@"%ld秒后重发",remainSec];
    }];
    
    #pragma mark 点击了获取验证码按钮
    - (IBAction)getCheckCodeAction:(id)sender {
        //判断如果手机号码不合法,可不触发倒计时
        if(0){
            self.getCheckCodeBtn.start = NO;
            return;
        }
        NSLog(@"执行获取验证码操作!!");
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            //判断如果验证码请求失败,可重置倒计时按钮
            if(0){
                [self.getCheckCodeBtn resume];
            }
        });
    }
    
    • 您也可以不依赖UI控件,直接开启一个倒计时任务
    ZXCountDownCore *countDownCore = [[ZXCountDownCore alloc]init];
    [countDownCore setCountDown:10 mark:@"testCountDown" resBlock:^(long remainSec) {
        //每秒执行一次
        NSLog(@"remainSec--%ld",remainSec);
    }];
    //开始倒计时
    [countDownCore startCountDown];
    
    • 启用或禁用自动存储倒计时进度:
    //disableScheduleStore 是否不存储倒计时进度,默认为NO,即默认存储倒计时进度
    obj.disableScheduleStore = YES;
    obj.disableScheduleStore = NO;
    
    • 倒计时控制:
    //开始倒计时
    -(void)startCountDown;
    //重新开始倒计时
    -(void)reStartCountDown;
    //结束倒计时
    -(void)stopCountDown;
    
    • 若需要实现多个不同的倒计时view共用进度,例如登录获取验证码按钮,注册获取验证码按钮,找回密码获取验证码按钮,只需设置相同mark即可。

    github地址 ZXCountDownView

    相关文章

      网友评论

        本文标题:iOS快速实现一个保存记录的倒计时按钮

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