zoukankan      html  css  js  c++  java
  • GCD 开启一个定时器实现倒计时功能

     1     UIAlertView * alt = [[UIAlertView alloc] initWithTitle:@"提示"
     2                                                    message:@"操作成功,马上返回继续体验吧"
     3                                                   delegate:self
     4                                          cancelButtonTitle:@"留在当前"
     5                                          otherButtonTitles:@"马上返回", nil];
     6     [alt show];
     7     //倒计时时间
     8     __block int timeout = 5;
     9     dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    10     dispatch_source_t source_t= dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue);
    11     //每秒执行
    12     dispatch_source_set_timer(source_t,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0);
    13     dispatch_source_set_event_handler(source_t, ^
    14     {
    15         if(timeout<=0)
    16         {
    17             //倒计时结束,关闭
    18             NSString *strTime = [NSString stringWithFormat:@"倒计时,%.2ds后返回", 0];
    19             dispatch_async(dispatch_get_main_queue(), ^
    20             {
    21                 //设置界面的按钮显示 根据自己需求设置
    22                 alt.message = strTime;
    23                 [alt dismissWithClickedButtonIndex:1 animated:YES]; // 模拟的没有调用delegate方法
    24                 dispatch_source_cancel(source_t);
    25             });
    26         }
    27         else
    28         {
    29             // int minutes = timeout / 60;   //
    30             int seconds = timeout % 60; //
    31             NSString *strTime = [NSString stringWithFormat:@"倒计时,%.2ds后返回", seconds];
    32             dispatch_async(dispatch_get_main_queue(), ^
    33             {
    34                 //设置界面的按钮显示 根据自己需求设置
    35                 alt.message = strTime;
    36             });
    37             timeout--;
    38         }
    39     });
    40     dispatch_resume(source_t);
    View Code

    最后,奉上一篇博文 http://blog.csdn.net/chumeng411/article/details/20918895 这一篇博文中简单论述了timer与线程的关系可以参考一下。

  • 相关阅读:
    easyUI的汇总列,在前端生成
    return返回两个三元表达式的和,返回不正确,同样要注意在JavaScript中,也是如此
    清除浮动有哪些方式?比较好的方式是哪一种?
    浏览器重置样式
    MUI框架的缩写输入
    会自动消失的提示信息
    JSON.stringify转化报错
    Jquery on方法绑定事件后执行多次
    属性索引选择元素
    字符串赋值数字时的问题
  • 原文地址:https://www.cnblogs.com/fuunnyy/p/5345062.html
Copyright © 2011-2022 走看看