iOS开发之NSTimer使用初探
2016-02-17 23:43
543 查看
创建一个定时器(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上的数字也就无法更新。
修改NSTimer的run loop
解决方法就是将其加入到UITrackingRunLoopMode模式或NSRunLoopCommonModes模式中。[[NSRunLoop currentRunLoop] addTimer:timer forMode:UITrackingRunLoopMode];
或者
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
NSRunLoopCommonModes:是一个模式集合,当绑定一个事件源到这个模式集合的时候就相当于绑定到了集合内的每一个模式。
代码下载地址::iOSStrongDemo
本文出处刚刚在线:http://www.superqq.com/blog/2015/07/10/ioskai-fa-zhi-nstimershi-yong-chu-tan/
相关文章推荐
- iOS学习----------图片的简单处理(2)
- iOS学习----------图片的简单处理(1)
- iOS开发之保存照片到自己创建的相簿
- iOS开发之保存照片到系统相册(Photo Album)
- iOS7之后如何正确隐藏状态栏
- iOS学习----------详解FFMPEG API
- iOS开发-retain/assign/strong/weak/copy/mutablecopy/autorelease区别
- Nagios远程监控windows方案补充说明
- IOS开发中的几种设计模式介绍
- iOS基本设计模式
- iOS实现View镂空效果
- ios 短音效的使用
- IOS第三天_面向对象1
- ios 拖线没有反应
- 收集Github上的iOS控件和开发资料
- iOS8定位问题解决方案
- IOS测试:XCTest小试牛刀
- ios类别和继承的区别
- iOS 得到圆形头像的方法
- ios-第六天笔记