太多的UIViews?成本是多少,有什么权衡?

时间:2013-06-23 02:31:49

标签: uiview uiscrollview

修改

想象一下,我正在重新实现CoreText。

我在这里得到一个NSString,它是一个有序的代码点列表,还有一组字形(一个NSFont / CTFont),它基本上是一个CGPathRef列表。

介于两者之间的东西负责布局。

某种环境必须提供CGGraphicContext来渲染。

我必须显示的对象类型是 CGPath。我担心为每个CGPath创建一个UIView!对于一个文本块,你不会为每个字符字形创建一个UIView,对吗?


我有一大堆(小)对象可以一次绘制。在1000年代。许多人都会在屏幕上移动,直到滚动到视野中。

一方面看起来我最好的选择是为每一个创建一个UIView。原因是:

  • 通过适当的平铺,我可以确保屏幕外的视图 大部分时间都没有在记忆中,而且在生活的时候也是如此 需要

  • 更重要的是,在缩放时我想将每个这样的视图的图层contentScale设置为zoomFactor,这样我仍然可以获得完整的 精确而不是模糊的楼梯

另一方面,我不知道(其他完全通用的)父视图如何与1000的孩子一起表现。 所以我很想重新考虑我的代码,以便“孩子们”成为单一视图的一个区域。 但后来我开始考虑设置该视图的图层contentScale并且我担心在缩放时会耗尽内存:我不知道图层机制是否“足够聪明”以至于当其大部分内容都不是时会创建一个巨大的后备位图无论如何看不见

怎么做,哦该怎么办?

任何人都有他们想分享的经验吗?

3 个答案:

答案 0 :(得分:2)

如果大多数对象随时都在屏幕上,那么最好不要为所有这些屏幕外对象创建视图。您需要智能地为那些可见的对象添加视图,并在它们离开屏幕时将它们从视图层次结构中删除。您可以使用UICollectionView来实现这一点 - 它设计精良,高效,灵活,易于使用和自定义 - 但我不知道它是否适用于缩放。

如果您决定在一个视图中绘制所有内容,并进行深度缩放,则应该查看CATiledLayer。它专为放大而设计。 Apple的MKMapView使用它来支持将其视口从地球大小缩放到(相对)几平方米。

答案 1 :(得分:1)

如果由于iOS版本边界而无法使用UICollectionView,并且您对使用UIScrollView中的视图感兴趣,那么请查看this类。它的使用方式与使用UITableview的方式相同。只需传入一些视图,它就会重复使用这些视图。您可以阅读自述文件。它很直接。

答案 2 :(得分:1)

我最近看到一个关于游戏的演示文稿,涉及数百个以UIViews实现的精灵,主要是图像视图。老款和新一代iPad的性能都非常出色。他的代码可以在https://github.com/bentford/ButtonWars/获得,因此您可能需要对其进行测试,以确定效果是否符合您的需求。

通常会假设观点是重量级的,但经验并不能证明这一点。