2009-06-06 54 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

尝试更改其重用标识符。然后,如果您想使其可以出队,请再次将标识符更改回来。我还没有尝试,但这可以工作!

相关问题