2012-05-08 77 views
0

我已經實現定製NSCache來存儲顯示在我的UITableViewCells遠程下載的圖像。請注意,圖像正在異步下載。如何避免滾動時在UITableViewCell中刷新圖像?

但是,如果我上下滾動很快,我仍然可以看到被刷新的圖像即使圖片均來自本地。任何人都可以幫助我理解如何避免令人耳目一新的問題?

+0

發佈一些代碼。 –

+0

「清爽」是什麼意思?它是否嘗試再次下載圖像,或者在加載的圖像中存在一些毛刺?此外,請顯示一些代碼。 –

+0

你需要使用帶標籤的單元格。 –

回答

1

這是一個很好的做法,重新使用的tableView細胞所以你需要在cellForRowAtIndexPath更新圖像,否則圖像將被搞砸。

裏有一些優化,但我可以建議:

  • 提高緩存的性能,使圖像加載速度更快,

  • 將圖像添加到單元格時使用標準或自定義標籤imageView,在cellForRowAtIndexPath比較單元格的圖像標籤值與單元格索引/行號(如部分* 1000 +行)的組合作爲散列指標。這應該讓你知道你是否真的需要更新所顯示的圖像,並可能會節省一些緩存讀取操作,

  • 如果加載的圖像是大的,並且您使用尺寸調整後的版本顯示在細胞上,存儲縮略圖分開 - 這將節省你,這可能是相當昂貴的尺寸調整操作,

  • 確保你重裝,你已經在緩存中,如果他們是過時的圖像,它也是重要的是不要執行檢查過於頻繁的大量的HTTP請求將使應用程序看起來很慢,並且耗盡電池的速度更快(更不用說狀態欄上的煩人活動指示器,因爲我希望用戶儘可能少地看到它)。

希望它有幫助。


在你有很多單元的情況下,它們中的大多數將被重用,而不是被創建。 如果您正在使用addSubview添加一個按鈕,任何細胞,重用單元將已經擁有它補充說,標籤文字,圖片也將被重新使用。

在這種情況下,你可能要檢查你是否需要一個新的圖像設置爲現有按鈕。其中一種簡單的方法是將單元格的節和行號存儲在圖像標籤(或單元標籤或按鈕標籤,無論)上,公式用於將兩個數字存儲在單個屬性中。 它會讓你知道你必須重用的單元格的部分/行號。

這並不總是有效,您可以根據自己的需要找到更好的解決方案。

+0

嗯......現在我認爲它可能是圖像調整大小的問題,讓我去檢查:) – trillions

+0

現場,我現在認爲這個問題是在你提到的第二點內。但是,您能否使用標準或自定義標籤向我解釋您的意思?它是圖像的標籤嗎?或標記到具有圖像的UIButton?謝謝! – trillions

+1

編輯一個答案,一個標準的標籤是'UIView'屬性'NSInteger標籤',在某些情況下,你會希望有一個文本/布爾/枚舉標籤,我會通過子類化和添加我需要的屬性。 –

0

在你的TableView委託你的cellForRowAtIndexPath方法,你需要檢查,如果圖像是在緩存中,如果不是你需要下載它。如果它存在,則需要將單元格的圖像設置爲緩存中的版本。我會假設你不是從緩存中取出圖像,而是重新下載它。

+0

我做了仔細檢查,以確保圖像是從緩存加載的,如果緩存可用。 – trillions