概述
简单的属性设置就能拥有一个不怕【退出页面/杀掉APP/修改系统时间】的倒计时按钮
Code
使用
快速集成
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;
网友评论