zoukankan      html  css  js  c++  java
  • iOS开发之NSTimer使用初探

    创建一个定时器(NSTimer)

    - (void)viewDidLoad {
        [super viewDidLoad];
        [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(actionTimer:) userInfo:nil repeats:YES];
    }
    
    - (void)actionTimer:(NSTimer *)timer
    {
    
    }
    

    NSTimer默认运行在default mode下,default mode几乎包括所有输入源(除NSConnection) NSDefaultRunLoopMode模式。

    actionTimer方法会每隔1s中被调用一次。NSTimer使用起来是不是非常简单。这是NSTimer比较初级的应用。

    当主界面被滑动时NSTimer失效了

    主界面被滑动是什么意思呢?就是说主界面有UITableView或者UIScrollView,滑动UITableView或者UIScrollView。这个时候NSTimer失效了。

    我们来写一个demo,在一个有UITableView的UIViewController上启动定时器,每1s数字加1,并将这个数字显示在UILabel上面.

    - (void)viewDidLoad {
        [super viewDidLoad];
        [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(actionTimer:) userInfo:nil repeats:YES];
    }
    
    - (void)actionTimer:(NSTimer *)timer
    {
        self.number++;
        self.label.text = [NSString stringWithFormat:@"%d",self.number];
        NSLog(@"%d",self.number);
    }
    

    关于UITableView和UILabel的创建我省去了。详细的代码可以点击这里下载:iOSStrongDemo,iOSStrongDemo我会不断更新,大家在github上star一下。

    这样当用户在拖动UITableView处于UITrackingRunLoopMode时,NSTimer就失效了,不能fire。self.label上的数字也就无法更新。

    nstimer1

    修改NSTimer的run loop

    解决方法就是将其加入到UITrackingRunLoopMode模式或NSRunLoopCommonModes模式中。

    [[NSRunLoop currentRunLoop] addTimer:timer forMode:UITrackingRunLoopMode];
    

    或者

    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
    

    NSRunLoopCommonModes:是一个模式集合,当绑定一个事件源到这个模式集合的时候就相当于绑定到了集合内的每一个模式。

    nstimer1

    代码下载地址::iOSStrongDemo

     

  • 相关阅读:
    交叉编译fw_printenv
    解压 xxxx.cpio.gz.u-boot
    创建Uboot 环境变量 bin 文件
    Linux快速显示图片
    移动终端的GPU显卡介绍
    Video Mode Timings
    change systemd service
    device tree DTB DTC 相互转换
    如何写出安全的API接口(参数加密+超时处理+私钥验证+Https)- 续(附demo)
    解决h5在ios 微信中 input框键盘收起 页面底部留白
  • 原文地址:https://www.cnblogs.com/easyToCode/p/5196891.html
Copyright © 2011-2022 走看看