1

编辑:

想象一下,我从事重新实现 CoreText 的业务。

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

中间的东西负责布局。

并且某种环境必须提供一个 CGGraphicContext 来渲染。

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


我有一组潜在的大(小)对象要一次绘制。在 1000 年代。许多将在屏幕外,直到滚动到视图中。

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

  • 通过适当的平铺,我可以确保屏幕外的视图大部分时间都不在内存中,并在需要时恢复活力

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

另一方面,我不知道(否则完全通用的)父视图将如何处理 1000 个子视图。所以我很想重新考虑我的代码,使“孩子”成为单一视图的一个区域。但后来我开始考虑设置该视图的图层 contentScale 并且我担心在缩放时会耗尽内存:我不知道图层机制是否“聪明”到不会创建一个巨大的支持位图,而它的大部分内容是反正看不见

怎么办,怎么办?

有人有什么经验想分享吗?

4

3 回答 3

2

如果大多数对象在任何时候都不会出现在屏幕上,那么最好不要为所有这些屏幕外对象创建视图。您需要智能地为那些可见的对象添加视图,并在它们离开屏幕时将它们从视图层次结构中删除。您也许可以使用UICollectionView它来简化它——它设计得非常好、高效、灵活、易于使用和定制——但我不知道它是否适用于缩放。

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

于 2013-06-25T05:35:26.563 回答
1

如果您由于 iOS 版本限制而无法使用 UICollectionView,并且您有兴趣重新使用 UIScrollView 中的视图,那么请查看此类。它的使用方式与使用 UITableview 的方式相同。只需传入视图数量,它就会重用视图。您可以阅读自述文件。它非常简单。

于 2013-06-25T07:15:53.257 回答
1

我最近看到一个关于游戏的演示,其中涉及数百个以 UIView 形式实现的精灵,主要是图像视图。在旧款和最新一代 iPad 上的性能都非常出色。他的代码可在https://github.com/bentford/ButtonWars/获得,因此您可能需要对其进行测试以查看其性能是否满足您的需求。

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

于 2013-07-02T03:56:48.323 回答