iOS倒計時的兩種實現方式

今天項目中遇到獲取驗證碼之后有一個倒計時功能的實現,百度了一下,有兩種實現方式的,再次總結一下,以便日后需要查看,也方面其他的人查看,不多說了直接貼代碼吧:

第一種:NSTimer

-在倒計時開始之后,讓button處于一種不可點擊的狀態,直至倒計時結束。

[self.vCodeBtn setEnabled:NO];

count = 60;

NSTimer *time = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(openFire:) userInfo:nil repeats:YES];

-函數實現方法:

-(void)openFire:(NSTimer *)time

{

count--;

NSString *miao = [NSString stringWithFormat:@"%ld",(long)count];

[self.vCodeBtn setTitle:miao forState:0];

if (count == 1)

{

[self.vCodeBtn setTitle:@"Reacquire" forState:0];

[self.vCodeBtn setEnabled:YES];

[time invalidate];

}

}

第二種:使用GCD來實現:

__block int timeout=300; //倒計時時間

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(timeout<=0){ //倒計時結束,關閉

dispatch_source_cancel(_timer);

dispatch_release(_timer);

dispatch_async(dispatch_get_main_queue(), ^{

//設置界面的按鈕顯示 根據自己需求設置

。。。。。。。。

});

}else{

int minutes = timeout / 60;

int seconds = timeout % 60;

NSString *strTime = [NSString stringWithFormat:@"%d分%.2d秒后重新獲取驗證碼",minutes, seconds];

dispatch_async(dispatch_get_main_queue(), ^{

//設置界面的按鈕顯示 根據自己需求設置

。。。。。。。。

});

timeout--;

}

});

dispatch_resume(_timer);

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1.{ NSTimer *timer; }- (void)viewDidLoad { timer = [NSTim...
    葉飛樓閱讀 741評論 0 0
  • NSTimer方式 @interface TimerButton ()@property (nonatomic, ...
    Jessica124閱讀 402評論 0 0
  • 目錄(GCD): 關鍵詞 混淆點 場景應用 總結 1. 關鍵詞 線程概念: 獨立執行的代碼段,一個線程同時間只能執...
    Ryan___閱讀 1,290評論 0 3
  • iOS中計時器常用的有兩種方式 使用NSTimer類(Swift 中更名為 Timer) NSTimer 常用的初...
    superDg閱讀 1,872評論 0 1
  • 終于,我可以提筆記錄那些年 你熟悉卻已陌生的臉 分手時我們沒有愉快地說再見 這是我留有的遺憾 你手機里她燦爛的笑臉...
    朗秋閱讀 308評論 0 3