美文网首页iOS开发iOS菜鸟食谱
iOS倒计时封装,并在VC中实时刷新

iOS倒计时封装,并在VC中实时刷新

作者: 超_iOS | 来源:发表于2016-04-07 21:59 被阅读954次

倒计时略简单,就是NSTimer 的使用,代码如下

@property (nonatomic, assign)int intervalTime;
@property (nonatomic, strong)NSDictionary *dic;
@implementation HNCountdownModel
- (void)setTime:(NSDate *)lastTime
{
    self.day = [NSString stringWithFormat:@"%d",self.intervalTime / (24 * 3600) ];
    self.hour = [NSString stringWithFormat:@"%d",self.intervalTime % (24 * 3600) /3600];
    self.minute = [NSString stringWithFormat:@"%d",self.intervalTime % 3600 / 60 ];
    self.second = [NSString stringWithFormat:@"%d",self.intervalTime %60];
    self.dic = @{@"day":self.day,@"hour":self.hour,@"minute":self.minute,@"second":self.second};

    self.countDownTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(countDown:) userInfo:nil repeats:YES];
    [[NSRunLoop currentRunLoop] addTimer:self.countDownTimer forMode:NSRunLoopCommonModes];//不理解的同学把这句注释掉看看就行了,总之就是防止计时器计时出现延迟不准等情况,和NSRunLoop有关,以后详聊
}

我们这里利用通知来把数据实时传输出去,或许还可以用KVO,没有仔细研究,研究过的麻烦说声.

- (void)countDown:(NSTimer *)sender
{
   
  [[NSNotificationCenter defaultCenter] postNotificationName:@"countDown" object:nil userInfo:self.dic];
    self.intervalTime--;
    self.day = [NSString stringWithFormat:@"%d",self.intervalTime / (24 * 3600) ];
    self.hour = [NSString stringWithFormat:@"%d",self.intervalTime % (24 * 3600) /3600];
    self.minute = [NSString stringWithFormat:@"%d",self.intervalTime % 3600 / 60 ];
    self.second = [NSString stringWithFormat:@"%d",self.intervalTime %60];
//    NSLog(@"%@-%@-%@-%@",self.day,self.hour,
//          self.minute,self.second);
    self.dic = @{@"day":self.day, @"hour":self.hour,@"minute":self.minute,@"second":self.second};
    if (self.intervalTime == 0) {
        NSLog(@"倒计时完成");
        [self.countDownTimer invalidate];//暂停计时器
    }
}

在VC中注册通知如下

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationAction:) name:@"countDown" object:nil];

#pragma mark - 通知
- (void)notificationAction:(NSNotification *)notify
{
    NSLog(@"%@",notify);
   self.orderView.dayLB.text = notify.userInfo[@"day"];
   self.orderView.houreLB.text = notify.userInfo[@"hour"];
  self.orderView.minuteLB.text = notify.userInfo[@"minute"];
    self.orderView.secondLB.text = notify.userInfo[@"second"];
}

- (void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"countDown" object:nil];
    
}

相关文章

  • iOS倒计时封装,并在VC中实时刷新

    倒计时略简单,就是NSTimer 的使用,代码如下 我们这里利用通知来把数据实时传输出去,或许还可以用KVO,没有...

  • 监听网络

    ios 注册通知、监听 iOS-OC-监听网络状态,有网时数据自动刷新 iOS实时监控网络状态的改变 简书 iOS...

  • axios+async/await无痛刷新token

    本文参考了axios如何利用promise无痛刷新token,并在此基础上采用await/async 封装,具体的...

  • h5与安卓,ios交互

    调用ios方法并传值 1、首先判断是不是ios手机 2、将ios方法进行封装并在页面调用传值即可 ios调用h5的...

  • viewDidLoad 多次创建视图对象

    -(void)viewDidLoad多次创建视图对象 场景 外部创建vc,并在对vc属性赋值时(vc.dataSo...

  • 倒计时

    ios怎么在cell上添加倒计时 iOS中 简单易懂的秒杀倒计时/倒计时 iOS开发-三种倒计时的写法 iOS实现...

  • iOS源码博文集锦3

    iOS精选源码 高仿淘宝首页 登录动画 iOS高德二次封装,有定位,轨迹,语音实时导航,GPS纠偏..... 逗视...

  • IOS上拉 下拉刷新

    iOS下拉刷新和上拉刷新 在iOS开发中,我们经常要用到下拉刷新和上拉刷新来加载新的数据,当前这也适合分页。iOS...

  • 闭包 * block * 代理 * 使用实例

    block是iOS4.0时才出现的技术 一.闭包 网络请求工具类,封装方法时,把闭包当参数封装,并在内部执行,这样...

  • iOS 记录UITableView 头部下拉加载,内容一直往下偏

    问题:自定义单独view(StoreListView)实现UITableView,在VC上使用,并在VC上用vie...

网友评论

  • xiaomayi2012:博主请问如果获取的时间是字符串 是不是得转换成nsdate格式在处理。。
    超_iOS:@xiaomayi2012 目测是的
    xiaomayi2012:@不知有汉_超 如果服务器返回给我的是一个字符串。我是不是得转换成时间戳。然后再把这个时间戳传到这个方法里面去。
    超_iOS:@xiaomayi2012 转换成nsdate 还怎么加减,就是时间戳的差值

本文标题:iOS倒计时封装,并在VC中实时刷新

本文链接:https://www.haomeiwen.com/subject/msqvlttx.html