ios 倒计时 (离开界面再回来继续)
来源:互联网 发布:炒股软件哪款好 编辑:程序博客网 时间:2024/06/02 14:28
ios 倒计时 (离开界面再回来继续)
#import <Foundation/Foundation.h>typedef NS_ENUM(NSInteger, wherefrom){ from1 = 1, from2 = 2, from3 = 3, };@interface cutDownManager : NSObject{ dispatch_source_t _timer;}@property (nonatomic,assign)__block int timeLeft;@property (nonatomic,assign) wherefrom from; //用于区别哪个倒计时+ (id)sharedTimerManager;- (void)countDown;@end
#import "cutDownManager.h"@implementation cutDownManager+ (id)sharedTimerManager{ static cutDownManager *manager =nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ if (manager ==nil) { manager = [[self alloc] init]; } }); return manager;}- (void)countDown{ if (_timeLeft >0) { if (_timer) { dispatch_source_cancel(_timer); } dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0); _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(_timeLeft<=0){//倒计时结束,关闭 dispatch_source_cancel(_timer); }else{ _timeLeft--; DLog(@"----lefttime ======%d",_timeLeft); } }); dispatch_resume(_timer); }}@end
应用
//获取短信验证码- (IBAction)getMsgCode{ timeout = 60; //倒计时时间 [self startTime];}-(void)startTime{ dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); _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(timeout<=0){ //倒计时结束,关闭 dispatch_source_cancel(_timer); dispatch_async(dispatch_get_main_queue(), ^{ //设置界面的按钮显示 根据自己需求设置 _getMsglabel.text = @"重新获取"; _getMsgBtn.userInteractionEnabled = YES; }); }else{ int seconds = timeout % 120; NSString *strTime = [NSString stringWithFormat:@"%.2d", seconds]; dispatch_async(dispatch_get_main_queue(), ^{ //设置界面的按钮显示 根据自己需求设置 _getMsglabel.text = [NSString stringWithFormat:@"%@s",strTime]; _getMsgBtn.userInteractionEnabled = NO; }); timeout--; DLog(@"---------%d",timeout); } }); //启动 dispatch_resume(_timer);}-(void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; //掐掉倒计时// if (_timer && timeout > 0) {// dispatch_source_cancel(_timer);// } if (timeout >0) { cutDownManager *manager = [cutDownManager sharedTimerManager]; manager.timeLeft = timeout; manager.from = from1; [manager countDown]; timeout = 0;//置为0,释放controller }}-(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; cutDownManager *manager = [cutDownManager sharedTimerManager]; int temp = manager.timeLeft; if (temp > 0 && (manager.from == from1)) { timeout = temp;//倒计时时间 _getMsgBtn.enabled =NO; [self startTime]; }else{ _getMsgBtn.enabled =YES; }}
1 0
- ios 倒计时 (离开界面再回来继续)
- 要离开就请永远别再回来
- 回来继续博客了
- iOS摇一摇界面进入下一层再回来不能摇的问题
- iOS 计时器 单例 GCD 切换控制器倒计时继续读秒
- 离开csdn,终于回来啦!
- 短信发送倒计时按钮封装,退出再进入可继续倒计时,绝对时间倒计时
- 回来继续我写技术
- 我回来了,继续学习!
- 回来了,继续更新blog
- 考研回来小屋继续开张
- 放松完毕回来准备继续...
- 清华退学博士王垠:离开是为了获得力量后再回来
- 华退学博士王垠:离开是为了获得力量后再回来
- CountDownTimer 倒计时封装(可 暂停 继续 重新开始)
- 离开出生的地方,又回来了。
- 离开一年了,今天又回来了!
- 倒计时欢迎界面(更有条理)
- 数据库学习笔记(三)函数
- Mysql目录结构与docker启动参数
- 5.x AssetBundle初步使用
- Linux系统配置
- node-webkit无边框窗口用纯JS实现拖动改变大小
- ios 倒计时 (离开界面再回来继续)
- centOS7安装时选择了图形化界面,进去的命令,提示需要选择
- 嵌入式心路历程
- 汇编LDR、LDM和STR、STM的区别
- hibernate中对象的瞬时态,持久态,脱管态
- ARM汇编指令——TST和BNE、BEQ解析
- Linux命令之man命令数字含义
- mac下brew安装php扩展swoole失败
- [转]成为一名嵌入式Linux开发工程…