CATiledLayer在缩放时更改不同大小的图像(地图相关:)

时间:2010-06-26 00:41:58

标签: iphone zoom catiledlayer

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

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

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

到目前为止,这种方法有效。

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

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

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

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

感谢您的帮助......

编辑:

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

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

哦,我的......:)

EDIT2:

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

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

1 个答案:

答案 0 :(得分:0)

听起来不再使用的磁贴不会从内存中释放出来。您的自定义覆盖

是什么
- (void)drawRect:(CGRect)rect method

看起来像?