UItableView實(shí)現(xiàn)平滑滾動(dòng)延遲加載圖片

在項(xiàng)目中我們都遇到過(guò)這種情況,給tableViewCell添加圖片,有時(shí)添加網(wǎng)絡(luò)圖片,在滑動(dòng)過(guò)程中會(huì)有一點(diǎn)兒卡,這是在滑動(dòng)過(guò)程中加載圖片,為了使用戶體驗(yàn)更好,程序看著更流暢。我們可以在滑動(dòng)結(jié)束后再加載圖片。

這里我們可以利用CFRunLoopMode的特性,我們知道RunLoop的mode有五種:kCFRynLoopDefaultMode:App的默認(rèn)Mode,通常主線程是在這個(gè)Mode下運(yùn)行

UITrackingRunLoopMode:界面跟蹤Mode,用于ScrollView追蹤觸摸滑動(dòng),保證界面滑動(dòng)時(shí)不受其他Mode影響

kCFRunLoopCommonModes:這是一個(gè)占位用的Mode,不是一種真正的Mode

UIInitializationRunLoopMode:在剛啟動(dòng)App時(shí)進(jìn)入的第一個(gè)Mode,啟動(dòng)完成后不再使用

GSEventReceiveRunLoopMode:接受系統(tǒng)事件的內(nèi)部Mode,通常用不到

這樣我們可以將圖片的加載放到NSDefaultRunLoopMode的mode中,這樣在滾動(dòng)UITrackingRunLoopMode這個(gè)mode時(shí)不會(huì)被加載而影響到。然后再利用performSelector: withObject: afterDelay:方法,這個(gè)方法在主線程繁忙的時(shí)候回延后執(zhí)行,因此在發(fā)生觸摸或是視圖還在滾動(dòng)時(shí)這個(gè)方法不會(huì)運(yùn)行。關(guān)于performSelector: withObject: afterDelay:方法的使用請(qǐng)看這篇文章?http://www.itdecent.cn/p/13b273937893。

最后代碼展示

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

withObject:downloadedImage

afterDelay:0

inModes:@[NSDefaultRunLoopMode]];

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • runtime 和 runloop 作為一個(gè)程序員進(jìn)階是必須的,也是非常重要的, 在面試過(guò)程中是經(jīng)常會(huì)被問(wèn)到的, ...
    made_China閱讀 1,269評(píng)論 0 7
  • 基本概念 進(jìn)程 進(jìn)程是指在系統(tǒng)中正在運(yùn)行的一個(gè)應(yīng)用程序,而且每個(gè)進(jìn)程之間是獨(dú)立的,它們都運(yùn)行在其專(zhuān)用且受保護(hù)的內(nèi)存...
    小楓123閱讀 1,001評(píng)論 0 1
  • 目錄 Runloop RunLoop 與線程 個(gè)人理解總結(jié) 應(yīng)用場(chǎng)景 1. 什么是RunLoop 基本作用 保持程...
    Ryan___閱讀 1,613評(píng)論 0 13
  • 文章目錄RunLoop簡(jiǎn)介1.1 什么是RunLoop? 1.2 RunLoop和線程1.3 默認(rèn)情況下主線程的R...
    lusen_b閱讀 452評(píng)論 0 2
  • RunLoop 文章目錄 RunLoop簡(jiǎn)介 1.1 什么是RunLoop? 1.2 RunLoop和線程 1.3...
    May_d8f1閱讀 341評(píng)論 0 1

友情鏈接更多精彩內(nèi)容