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

概述

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

Code

AZTools/UIButton+AZCountDown

使用

快速集成

pod 'AZTools'

添加头文件

#import 

设置属性

- (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几个属性设置搞定倒计时按钮)