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

     

  • 相关阅读:
    阅读随笔
    四则运算生成器基础版
    《梦断代码》阅读计划
    JavaScript值传递和引用传递
    nodejs包高效升级插件npm-check-updates
    JavaScript常用技巧之进制转换
    js 数组、字符串、Json互相转换
    利用Stream模式进行文件拷贝
    ACM-ICPC 2018 焦作赛区网络预赛 H、L
    ACM-ICPC 2018 沈阳赛区网络预赛 G 容斥原理
  • 原文地址:https://www.cnblogs.com/easyToCode/p/5196891.html
Copyright © 2011-2022 走看看