实现思路:
创建按钮, 添加点击方法;
用NSTimer定时器, 每秒执行一次, 定时改变Button的title,改变Button的样式, 设置Button不可点击;
若倒计时结束, 定时器关闭, 并改变Button的样式, 可以点击;
在按钮的点击事件里调用该方法.
[selfopenCountdown:5interval:^(NSIntegercurrentTime) {
//设置按钮显示读秒效果
[self.followButtonsetTitle:[NSStringstringWithFormat:@"%@(%zd)",confirmToFollow,currentTime]forState:UIControlStateNormal];
}finish:^{
//设置按钮的样式
[self.followButton setTitle:confirmToFollow forState:UIControlStateNormal];
//关注
if(self.followButtonClickBlock){
self.followButtonClickBlock();
}
}];
-(void)openCountdown:(NSInteger)intervalinterval:(void(^)(NSIntegercurrentTime))currentIntervalfinish:(dispatch_block_t)finish{
__blockNSIntegertime = interval;//倒计时时间
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);
dispatch_source_set_timer(_timer,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0); //每秒执行
dispatch_source_set_event_handler(_timer, ^{
if(time <=0){//倒计时结束,关闭
dispatch_source_cancel(_timer);
dispatch_async(dispatch_get_main_queue(), ^{
if(finish){//设置按钮的样式
finish();
}
});
}else{
intseconds = time %60;
dispatch_async(dispatch_get_main_queue(), ^{
if(currentInterval){//设置按钮的样式
currentInterval(seconds);
}
});
time--;
}
});
dispatch_resume(_timer);
}
注意点:
我们在创建Button时, 要设置Button的样式:
当type为: UIButtonTypeCustom时 , 是读秒的效果.
当type为: 其他时, 是一闪一闪的效果.
网友评论