2

我有一个带有 UIView 的 UIScrollView,它又包含一个显示地图的 CATiledLayer。

我必须从一个可以非常深入地放大的概述开始。所以我用 4 种不同尺寸的地图制作了 4 张不同的图像(实际上是 PDF)(最大的有 5700 x 6700 像素)

我将最小的(概述)添加到 CATiledLayer,然后在某些缩放级别上交换图像。

到目前为止,这有点工作。

问题是,当我显示最大的地图(最近缩放)时,图块变得非常大,绘制它们需要很长时间(并且根据细节/偏差的水平,应用程序会产生内存警告崩溃)。

我尝试从最大的地图开始,并在地图首次显示时将缩放级别设置为最小值,但随后绘制概览需要很长时间,因为图块变得非常小(当我没有将其设置为最小缩放时,一切顺利)。

我在切换地图时尝试调整图块大小 - 但显然,这不起作用。

知道如何解决这个问题吗?;)

谢谢你的帮助...

编辑:

我现在正在尝试定义两个单独的 CATiledLayers,然后在达到某个缩放级别时交换它们 - 但这会使应用程序崩溃?

[myContentView.layer replaceSublayer: tiledLayer with: tiledLayerBig];

天啊... :)

编辑2:

好的 - 我让它工作了 - 或多或少。现在唯一发生的事情是,当我添加最大的图像时,CATiledLayer 的行为很奇怪。它可以正常工作一段时间,但是当绘制一定数量的图块时,我会收到内存警告并且应用程序最终会崩溃。我实际上希望这些不可见的瓷砖在离开视口时会被处理掉。这似乎没有发生,所以最终,所有的瓷砖都会被绘制出来,这对于 iPhone 内存来说似乎太多了...... :(

任何想法,如何解决这个问题?

4

1 回答 1

0

听起来不再使用的图块没有从内存中释放。您的自定义覆盖是什么

- (void)drawRect:(CGRect)rect method

看起来像?

于 2011-07-14T17:58:19.403 回答