美文网首页
iOS几个属性设置搞定倒计时按钮

iOS几个属性设置搞定倒计时按钮

作者: 水暮竹妖 | 来源:发表于2020-12-05 16:28 被阅读0次

    概述

    简单的属性设置就能拥有一个不怕【退出页面/杀掉APP/修改系统时间】的倒计时按钮

    Code

    AZTools/UIButton+AZCountDown

    使用

    快速集成

    pod 'AZTools'
    

    添加头文件

    #import <UIButton+AZCountDown.h>
    

    设置属性

    - (void)viewWillAppear:(BOOL)animated {
        [super viewWillAppear:animated];
        // 恢复倒计时
        [self.button az_cd_recover];
    }
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // ...   
      
        self.button.az_cd_identify = @"AZCountDownDemoBtn";
        self.button.az_cd_count = 60;
        self.button.az_cd_countdownBlock = ^(NSInteger countDown, UIButton * _Nonnull button) {
            [button setTitle:[NSString stringWithFormat:@"%lds",(long)countDown] forState:UIControlStateDisabled];
        };
        self.button.az_cd_endBlock = ^{
            NSLog(@"倒计时结束!");
        };
    }
    
    - (IBAction)startCountDown:(UIButton *)sender {
        // 用户点击开始倒计时
        [sender az_cd_start];
    }
    

    方案概述

    防止通过退出页面/杀掉APP的方式重置倒计时

    通过唯一标志位将倒计时的到期时间记录在本地,每次恢复az_cd_recover倒计时的时候从本地读取到期时间并计算剩余时间

    防止修改系统时间修改倒计时

    存储的到期时间是服务器时间,和手机本地时间无关。这里主要用到了AZServiceDate这个类,想要达到完全和服务器时间同步还需在合适的时机调用AZServiceDate的更新服务器时间方法。

    // AZServiceDate.h
    
    /** 以特定URL返回的Date为基准更新ServiceDate */
    + (void)updateDateWithUrl:(nullable NSString *)url success:(dispatch_block_t)success failure:(dispatch_block_t)failure;
    
    /** 通过 RFC3339 或者 RFC822 string 直接更新基准时间 */
    + (void)updateStandardNetResponseDate:(nullable NSString *)dateStr;
    

    相关文章

      网友评论

          本文标题:iOS几个属性设置搞定倒计时按钮

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