UItableView实现平滑滚动延迟加载图片

在项目中我们都遇到过这种情况,给tableViewCell添加图片,有时添加网络图片,在滑动过程中会有一点儿卡,这是在滑动过程中加载图片,为了使用户体验更好,程序看着更流畅。我们可以在滑动结束后再加载图片。

这里我们可以利用CFRunLoopMode的特性,我们知道RunLoop的mode有五种:kCFRynLoopDefaultMode:App的默认Mode,通常主线程是在这个Mode下运行

UITrackingRunLoopMode:界面跟踪Mode,用于ScrollView追踪触摸滑动,保证界面滑动时不受其他Mode影响

kCFRunLoopCommonModes:这是一个占位用的Mode,不是一种真正的Mode

UIInitializationRunLoopMode:在刚启动App时进入的第一个Mode,启动完成后不再使用

GSEventReceiveRunLoopMode:接受系统事件的内部Mode,通常用不到

这样我们可以将图片的加载放到NSDefaultRunLoopMode的mode中,这样在滚动UITrackingRunLoopMode这个mode时不会被加载而影响到。然后再利用performSelector: withObject: afterDelay:方法,这个方法在主线程繁忙的时候回延后执行,因此在发生触摸或是视图还在滚动时这个方法不会运行。关于performSelector: withObject: afterDelay:方法的使用请看这篇文章 https://www.jianshu.com/p/13b273937893

最后代码展示

[self.avatarImageView performSelector:@selector(setImage:)

withObject:downloadedImage

afterDelay:0

inModes:@[NSDefaultRunLoopMode]];

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • runtime 和 runloop 作为一个程序员进阶是必须的,也是非常重要的, 在面试过程中是经常会被问到的, ...
    made_China阅读 1,260评论 0 7
  • 基本概念 进程 进程是指在系统中正在运行的一个应用程序,而且每个进程之间是独立的,它们都运行在其专用且受保护的内存...
    小枫123阅读 989评论 0 1
  • 目录 Runloop RunLoop 与线程 个人理解总结 应用场景 1. 什么是RunLoop 基本作用 保持程...
    Ryan___阅读 1,595评论 0 13
  • 文章目录RunLoop简介1.1 什么是RunLoop? 1.2 RunLoop和线程1.3 默认情况下主线程的R...
    lusen_b阅读 443评论 0 2
  • RunLoop 文章目录 RunLoop简介 1.1 什么是RunLoop? 1.2 RunLoop和线程 1.3...
    May_d8f1阅读 335评论 0 1

友情链接更多精彩内容