由于标签很多,UIScrollView性能问题

时间:2011-05-05 11:39:48

标签: iphone uiscrollview

我有一个非常大的UIScrollView(contentSize 8000 x 960),有很多小标签。

仅当您滚动到标签所属的区域时才会添加标签。因此,首先,流氓是流畅的,但随着越来越多的标签被加载,性能会越来越差。

保持滚动顺畅的最佳解决方案是什么? CATiledLayer是可行的吗?或者应该隐藏视图外的标签还是类似的?

非常感谢你的帮助!

的Stefan

修改 绘制一些对象而不是使用视图时,我获得了巨大的性能提升;但是现在,我还有另一个问题;如果我直接绘制到UIScrollView上,一切都表现很好。但是如果我在UIScrollView上放置一个UIView并绘制它,性能会再次下降(两次调用setNeedsDisplayInRect:在scrollViewDidScroll中:)。

所以层次结构:
的UIWindow
UIView的
UIScrollView< ==在这里绘图

工作正常。

但层次结构:
的UIWindow
UIView的
UIScrollView(尺寸8000x960)
UIView(尺寸8000 x 960)< ==这里绘图

表现不好。

有什么想法吗?我需要上面的UIView,因为绘图应该是上面的一些UIViews;所以我将UIViews放在scrollView中并在上面的视图中绘制......

4 个答案:

答案 0 :(得分:1)

最好的方法是只使用几个UILabel并重复使用它们。但是你必须实现- (void)scrollViewDidScroll:(UIScrollView *)scrollView并在那里做一些可重用的逻辑。根据具体情况,可能更容易使用UITableView并将其转换为90度,因此它看起来像滚动视图。这样你就可以使用TableView的内置可重用逻辑。

答案 1 :(得分:1)

标签重用是可能的解决方案之一。有时它没有多大帮助。当出现新的UIView时,将调用drawRect方法,这可能会导致动画出现问题。

有时最好的解决方案是直接使用Core Graphics绘制标签(我的意思是文本)而不创建UILabel对象或其他东西。 CALayer会提高性能,但它可能对你没有多大帮助。

但首先你应该记住,alpha = 0或者hidden = YES的视图根本不会被绘制,因此使用它们不会受到惩罚。也许您应该在使用Core Graphics之前尝试隐藏未使用的。

答案 2 :(得分:0)

对于其他人看到这篇文章,我能够通过启用每个视图的“shouldRasterize”属性,大幅提高性能并将UIViews保留在滚动条中而不使用表格。当视图处于运动状态时,此属性将视图呈现为图像,从而不需要为其移动的每个像素重新处理该视图。所以,如果我有一个名为UIButton的按钮,就会启用它:

button.layer.shouldRasterize = YES;

答案 3 :(得分:-1)

您是否尝试过与UITableViewCell

类似的内容
dequeueReusableCellWithIdentifier

使用reuseIdentifer重复使用曾经分配的标签..