NSTimer定时器的使用
2016-01-20 22:28
288 查看
NSTimer叫做“定时器”,它的作用如下:
1)在指定的时间执行指定的任务
2)每隔一段时间执行指定的任务
调用下面的方法就会开启一个定时任务:
代码说明:每隔ti秒,调用一次aTarget的aSelector方法,yesOrNo决定了是否重复执行这个任务。
注:通过invalidate方法可以停止定时器的工作,一旦定时器被停止了,就不能再次执行任务。只能再创建一个新的定时器才能执行新的任务。
有一个需要注意的情况
如果在界面中有两个UIScrollView控件A和B,其中A控件使用NSTimer定时自动滚动,如果此时一直拖动B控件,则A会停止自动滚动,不再滚动B控件时,A则继续自动滚动。
原因:与多线程的处理有关,只能处理一个UIScrollView的滚动
解决方法:
NSTimer的代码示例
在控制器ViewController.m文件中
1)在指定的时间执行指定的任务
2)每隔一段时间执行指定的任务
调用下面的方法就会开启一个定时任务:
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;
代码说明:每隔ti秒,调用一次aTarget的aSelector方法,yesOrNo决定了是否重复执行这个任务。
注:通过invalidate方法可以停止定时器的工作,一旦定时器被停止了,就不能再次执行任务。只能再创建一个新的定时器才能执行新的任务。
有一个需要注意的情况
如果在界面中有两个UIScrollView控件A和B,其中A控件使用NSTimer定时自动滚动,如果此时一直拖动B控件,则A会停止自动滚动,不再滚动B控件时,A则继续自动滚动。
原因:与多线程的处理有关,只能处理一个UIScrollView的滚动
解决方法:
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
NSTimer的代码示例
在控制器ViewController.m文件中
@interface ViewController () <UIScrollViewDelegate> //定时器 @property (nonatomic,strong) NSTimer *timer; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; self.scrollView.delegate = self; // 添加定时器(每隔2秒调用一次self 的nextImage方法) [self addTimer]; } /** * 添加定时器 */ -(void)addTimer{ self.timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(nextImage) userInfo:nil repeats:YES]; //解决拖动其他UIScrollView时 定时器不再滚动 看不懂 [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes]; } /** * 移除定时器 */ -(void)removeTimer{ [self.timer invalidate]; //因为定时器停止后则变为无效定时器 所以需要从内存中移除 self.timer = nil; } /** * 下一张图片 */ -(void)nextImage{ //每次需要执行的代码 } /** * 开始拖拽的时候调用 */ -(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{ // 停止定时器 一旦停止就不能再用了 [self removeTimer]; } /** * 停止拖拽的时候调用 */ -(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{ // 添加定时器 [self addTimer]; } @end
相关文章推荐
- CentOs中JDK与tomcat配置
- Boostrap-Glyphicons图标变成中文
- Problem E: 用数字造数字(II)
- Java快速入门【1~10】
- 设计模式的5大设计原则
- 记一次驴唇不对马嘴的DIY之旅(七)
- 使用python+selenium完成qq空间自动登录小程序
- 欢迎使用CSDN-markdown编辑器
- Swift 闭包(closure)
- 如何用angularjs制作一个完整的表格之一__创建简单表格
- C# 模拟登陆并继续访问其他页面
- jsp 入门 cookie session
- LinkedList 模拟队列的结构
- Problem D: 使用指针访问数组元素--程序填空
- Libevent简介和使用
- C语言标准
- Android摄像头基础——第二阶段 自定义简单的相机
- C++(2)
- Autofac在MVC4中牛刀小试
- 访微博作业