最近一個(gè)項(xiàng)目有獲取手機(jī)短信跟郵箱驗(yàn)證碼功能, 所以要加一個(gè)UIButton倒計(jì)時(shí)功能
例子代碼如下:
- //獲取驗(yàn)證碼按鈕
- - (IBAction)getButtonClick:(UIButton *)sender;
-
- #pragma mark - 獲取驗(yàn)證碼
- - (IBAction)getButtonClick:(UIButton *)sender
- {
- //正常狀態(tài)下的背景顏色
- UIColor *mainColor = [UIColorcolorWithRed:84/255.0green:180/255.0blue:98/255.0alpha:1.0f];
- //倒計(jì)時(shí)狀態(tài)下的顏色
- UIColor *countColor = [UIColorlightGrayColor];
- [selfsetTheCountdownButton:sender startWithTime:5title:@"獲取驗(yàn)證碼"countDownTitle:@"s"mainColor:mainColor countColor:countColor];
- }
-
- #pragma mark - button倒計(jì)時(shí)
- - (void)setTheCountdownButton:(UIButton *)button startWithTime:(NSInteger)timeLine title:(NSString *)title countDownTitle:(NSString *)subTitle mainColor:(UIColor *)mColor countColor:(UIColor *)color {
- //倒計(jì)時(shí)時(shí)間
- __block NSInteger timeOut = timeLine;
- 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);
- //每秒執(zhí)行一次
- dispatch_source_set_timer(_timer,dispatch_walltime(NULL,0), 1.0 * NSEC_PER_SEC,0);
- dispatch_source_set_event_handler(_timer, ^{
-
- //倒計(jì)時(shí)結(jié)束嚷量,關(guān)閉
- if (timeOut == 0) {
- dispatch_source_cancel(_timer);
- dispatch_async(dispatch_get_main_queue(), ^{
- button.backgroundColor = mColor;
- [button setTitle:titleforState:UIControlStateNormal];
- button.userInteractionEnabled =YES;
- });
- } else {
- int seconds = timeOut % 60;
- NSString *timeStr = [NSStringstringWithFormat:@"%0.1d", seconds];
- dispatch_async(dispatch_get_main_queue(), ^{
- button.backgroundColor = color;
- [button setTitle:[NSStringstringWithFormat:@"%@%@",timeStr,subTitle]forState:UIControlStateNormal];
- button.userInteractionEnabled =NO;
- });
- timeOut--;
- }
- });
- dispatch_resume(_timer);
- }