2012-01-06 60 views
0

所以,我目前有一個GridView類,這實際上是它聽起來像。它是UIView的一個子類,它有一個臨時區域,其中有一堆子視圖以網格狀方式放置。 GridView的每個單元格都是調用drawRect的自定義UIView子類。自定義UIView惰性加載滾動太慢

我按照UITableView模式實現了延遲加載。我只加載和添加可見的網格單元(每邊+/- 2個單元格)。當視圖滾動瀏覽時,我緩存在NSMutableSet中不再可見的單元格,並重新使用該Set中的單元格來構建現在可見的單元格。所有關於這一切似乎都很好,因爲我已經測試過,並且沒有內存泄漏。

問題是,滾動太慢/生澀。用戶滾動得越快,就越快。有時候,如果你滾動速度很快,它會引發內存警告。經過一些調試工作後,我發現當它開始凍結和猛拉時,gridview中的子視圖不會被移除,就像它們應該一樣

我還注意到,iPad 1與iPad 2的滾動速度明顯較慢

我的問題是,有沒有人有任何想法如何處理?任何技巧或優化,以停止滾動的干擾?在這一點上任何事情都會有所幫助,因爲我一直試圖弄清楚這個問題2天。由於事先

回答

0

可能放緩原因:1)的drawRect 2)用戶在cacheing啓用有源接口

選擇一個)預載,然後本平滑的界面,或b)平滑滾動而裝載的東西的背景下,空白區域負載正在進行?

調試:你有沒有在這個過程中嘗試過做NSLog,比如對於每個緩存調用,看看它是否做了很多不必要的工作?

+0

感謝您的快速回復。 drawRect繪製一個矩形並填充背景。在某些情況下,在另一個函數(不是drawRect)中,它會創建另一個自定義UIView(然後調用它自己的drawRect)並將其作爲子視圖添加進來。我認爲這可能是一個問題,但在分析它之後,drawRect並不佔用太多時間。 至於選擇a),這不會工作,因爲我可以有一個巨大的網格,比如1000 x 5,並加載所有這些單元格可能需要10秒以上 你能解釋選擇b)多一點?我不太清楚我的理解。 – baselq 2012-01-06 05:11:11

+0

這個想法是,如果你知道這1000個對象所需的空間,你可以使每個對象和它的佔位符gfx被初始化,而每個對象的內容的實際加載將取決於它在屏幕上可見。一個例子可能是easytableview通過alekseyn。它似乎處理至少數百個圖像,沒有可察覺的故障。我認爲,相同的邏輯應該適用於自定義視圖,而不是圖像。 – karmington 2012-01-06 08:54:11