以下是使用 scheduledTimerWithTimeInterval 方法来实现定时器
- (void)addTimer
{
NSTimer scheduledTimerWithTimeInterval:2.0 repeats:YES block:^{
[self nextImage];
}
}
该方法会自动为我们实例化的timer添加到当前线程的RunLoop中,并且默认模式是 
NSDefaultRunLoopMode
。但当前线程是主线程时,
当scrollView或其子类进行滚动的时候,UIKIT会自动将当前runLoopMode切换为
UITrackingRunLoopMode
,因为runLoop只能在各种Mode之间切换,同一时间只能存在一个Mode,所以你加在
NSDefaultRunLoopMode
中的计时器当然不会走了。
 
因此,为了设置一个不被UI干扰的Timer,我们需要手动创建一个Timer,再获取到当前线程的Runloop,然后使用RunLoop的 addTimer:forMode: 方法来把Timer按照指定的模式加入到RunLoop中。
- (void)addTimer
{
NSTimer *timer = [NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(nextImage) userInfo:nil repeats:YES];
// 消息循环
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
[runLoop addTimer:timer forMode: NSRunLoopCommonModes];
}
当加入到commonModes中时,实际上系统是找出commonModes代表的所有Mode,如 NSDefaultRunLoopMode 和 UITrackingRunLoopMode ,让后分别将其加入了这些mode中。

最新文章

  1. iOS开发路线简述
  2. 在dede:arclist、dede:list等标签中调用附加字段
  3. tracert-命令小结
  4. 怎样获取优酷站内视频的MP4格式地址,嵌入到手机页面播放
  5. WEB安全测试之XSS攻击
  6. [转载]C#获取本机IPv4地址
  7. trackr: An AngularJS app with a Java 8 backend – Part III
  8. Sciter/HTMLayout内存占用评测
  9. asp.net中webservice与android的json数据交互方式设置
  10. linux 进程数
  11. servlet之隐藏域
  12. lumion室内渲染二6.3
  13. 【CF932E】Team Work(第二类斯特林数)
  14. 数据库导入.bacpac 文件创建新实例
  15. Android Studio添加so文件并打包到APK的lib文件夹中
  16. 安装node版本管理工具之NVM
  17. C++基础学习-20120515
  18. Android Fragment重要函数
  19. springMVC之增删改查
  20. 独立服务器远程重装Linux系统

热门文章

  1. (CS229)监督学习应用和梯度下降
  2. 关于nodejs中的增删改查
  3. 【转】not found while looking for property错误
  4. MySQL连接报错(错误:1130)
  5. Spark集群和任务执行
  6. ()C++中的赋值运算符重载函数(operator=)
  7. 【linux】-Makefile简要知识+一个通用Makefile
  8. .Net5,C#9 新语法(逻辑和属性模式,记录)
  9. # Maven:Could not transfer artifact org.springframework:spring-webmvc:pom:。。。(系统找不到文件),从网上clone到本地的项目报红
  10. tcp输入数据 慢速路径处理 && oob数据 接收 && 数据接收 tcp_data_queue