2009-06-06 55 views
0

我在項目中使用Three20庫的一部分。具體來說,這個視圖實質上是一個表格視圖,圖像跨4個單元跨越每個單元格,以模仿iPhone的照片應用縮略圖視圖。阻止UITableViewCell出隊成爲可能嗎?

我注意到,一旦單元格的底部到達導航欄的底部(這是半透明的,所以我們實際上可以看到它消失),每個單元格的行爲都會被排出。這裏提出的問題是,每當一個單元格出隊,然後重新加載到視圖中時,它將重新加載圖像,這導致滾動在除了慢速滾動表格之外的任何事情時變得非常緊張。我知道這些單元格被重複使用以最大限度地減少內存使用量,但可以防止單元格出列嗎?或者重新定義它們準備重新使用時的「邊界」,以創建一個更大的緩衝區,這樣當它們離開屏幕一定數量的行時它們纔會消失?

回答

2

你有向後出隊。 UITableView不會退出。你打電話給-dequeueResusableCellWithIdentifier:。 「出列」並不意味着「發佈」。這意味着「拉開緩存不再使用的可重用單元隊列」。它被稱爲「出隊」,因爲它是一個單元的FIFO隊列,並且您將第一個關閉。

如果滾動速度較慢,則需要提高繪製速度,也許您需要在UITableView請求時更快地返回單元格。離開可重用單元的系統不是爲了節省內存(它實際上花費內存);這是爲了提高性能。你不想繞過它;這正是它需要幫助解決的情況。

那麼,你如何繪製這些單元格,以及如何在UITableView請求時配置它們?這就是我們要找到性能提升的地方。

+0

感謝您的澄清。我不完全理解這個庫,它沒有很好的文檔記錄/代碼中沒有很多評論。 [This](http://github.com/joehewitt/three20/tree/b78944872623673b1329688fd59a5708f048bef8/src)是庫和[this](http://github.com/joehewitt/three20/blob/b78944872623673b1329688fd59a5708f048bef8/src/TTThumbsViewController。米)是類本身。我試圖通過導入的類來查看實際配置發生的位置。 – shoreline 2009-06-06 23:24:24

0

我相信你想改變表格視圖框架來包含你的導航欄區域。

[self.tableView setFrame:GCRectMake(0,0,320,480)]; 

你應該記住,這可能會導致一些其他問題該區域將被計爲可見區域,你將無法從您的半透明導航欄下進行滾動的第一個單元格。要解決這一點,你可能還需要設置你的tableView.tableHeaderView到對應的UINavigationBar

高度(理論上你可以有你的觀點的底部中的UITabBar一樣同樣的問題)的空UIView

+0

如何調整tableView在這裏的幫助? – 2009-06-07 00:17:47

+0

,因爲用於計算表格單元格可見/不可查看的幀可能有錯誤的值。 IE:它不包含在透明導航欄下,因爲導航欄通常不透明,通常可以在此時將表格單元從視圖中移除。 – Jehiah 2009-06-15 20:23:09

0

你可以嘗試把你的圖像放入一個NSMutableDictionary。在你建立你的細胞的地方,檢查你想要的圖像是否已經存儲。如果是,則使用該副本,如果不是從最初獲取圖像的任何位置加載它,並將其放入字典中。我想我使用了一個NSMutableDictionary,圖像標識符作爲鍵和圖像作爲值來做到這一點,它加快了表滾動。

如果出現內存警告,您可能需要卸載NSMutableDictionary。

你的問題可能只是你通過網絡加載圖像,這會導致滾動干擾。請點擊此處查看解決方案。

Preloading images from URL in TableViewCell

+0

拇指正在從應用程序的文檔目錄中加載。但我注意到,Facebook應用程序的行爲(這是拇指視圖的基礎)創建單元格,然後在檢索到拇指時添加拇指。此方法不具有相同的口吃。 – shoreline 2009-06-08 04:43:26

0

嘗試更改其重用標識符。然後,如果您想使其可以出隊,請再次將標識符更改回來。我還沒有嘗試,但這可以工作!

相關問題