2012-04-03 48 views
6

我有180 UILabels(子视图UITableViewCells)在一个iPad应用程序与155宽度×155高度为每个UILabel,每个包含大量的Unicode文本(阿拉伯语),当我滚动DOWN DOWN TableView它挂起1秒钟,然后保持正常滚动,这发生在用户每次滚动尝试时都会发生,并且会在iPAD2设备上进行测试。太多UILabels与unicode文本

但是,当我将文本更改为英语语言(英语文本量也很大)时,TableView未挂起并正常滚动。

任何人都知道如何解决这个问题与Unicode文本?

非常感谢你提前。

编辑:

代码是大,以适应这里,所以在短暂的,我创建每个UILabel与这样的循环:[[[UILabel alloc] initWithFrame:CGRectZero] autorelease];cellForRowAtIndexPath方法,然后根据接口与框架相同的方法稍后玩方向,之后,我将每个UILabel添加到像这样的单元格:[cell.contentView addSubView:myLabel];。每个单元格包含这些'UILabels'中的4个,所以我总共有45个单元格,没有更多,直接简单的代码。

+3

我不知道直接的答案,但在任何情况下都尽可能快地尝试优化您的应用程序,它将尽可能快地服务于'UITableViewCells'的子视图,因为存在另一个潜在的威胁。如果用户滚动速度过快以致单元格可能会在其内容呈现之前滚动出来,那么整个'UITableView'将被清空,并且无法在不重新加载整个视图的情况下恢复它。 – MrTJ 2012-04-03 08:21:08

+1

我认为这个问题存在于Unicode文本的大小范围内,在将文本分配给标签之前,仍然找不到缩小此大小的方法 – JAHelia 2012-04-03 08:28:44

+8

您是否认为用180个标签加载大文本创建视图是最好的在响应和整齐的智能手机应用程序设计方法? – serb 2012-04-03 08:30:50

回答

0

有很多方法可以优化你的代码:

一张支票,如果您的应用程序没有泄漏。正确发布标签。 使用单元格的可重用性。我不知道你是否在使用它。 由于每次滚动cellForRowAtIndexPath都会调用委托方法。

In case you dont know about reusability try this link.

+0

我在这种情况下使用了dequeueReusableCell,没有任何好处 – JAHelia 2012-04-03 10:23:16

+0

内存的分配将比实际的重新绘制快得多。 – Sulthan 2012-04-03 10:24:11

+0

你能告诉我你的代码吗?由于加载多个图像可以在一定程度上进行优化,因此我们可以优化加载标签 – DivineDesert 2012-04-03 10:27:16

1

Unicode的使用不应该是这里的问题,因为它会以类似的速度任何其他文本渲染。

可能有一些问题会减慢你的代码。首先,您应该尝试使用UITableView的本地单元重用,将标签添加到UITableViewCell,然后将它们dequeueWithResusableIdentifier。您应该只在该方法返回nil时生成标签,并且您必须创建一个新的UITableViewCell(如果您已经这样做,则不清楚原始问题)。

之后你可以做的另一件事是确保尽可能多的视图不透明以加快合成速度。仪器包括一个选项,可以使非透明视图变得更容易。

+0

dequeueWithResusableIdentifier已被使用但没有任何明显的区别,正如我在问题中提到的那样,tableView通常在文本是英文时滚动,而在文本为Unicode时非正常 – JAHelia 2012-04-03 11:10:36