2010-06-26 65 views
2

我有一个带有UIView的UIScrollView,它包含一个显示地图的CATiledLayer。CATiledLayer在缩放时更改不同大小的图像(地图相关:)

我必须从一个概述开始,可以放大非常深。因此,我制作了4种不同尺寸的地图(最大尺寸为5700 x 6700px)的4幅不同图像(实际上是PDF)。我将最小的(概览)添加到CATiledLayer,然后在某些缩放上交换图像水平。

到目前为止,这种有点作品。

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

我试图从最大的地图开始,并在地图第一次显示时将缩放级别设置为最小值,但由于图块变得非常小(当我没有设置它时需要很长时间来绘制概览图最小变焦,一切运转平稳)。

我试图调整瓷砖大小,当我切换地图 - 但显然,这是行不通的。

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

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

编辑:

现在我想定义两个单独的CATiledLayers,然后交换他们达到一定的缩放级别时 - 但是,使应用崩溃?

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

哦,我... :)

EDIT2:

好了 - 我得到它的工作 - 更多或更少。现在唯一发生的事情是,当我添加最大的图像时,CATiledLayer表现得很奇怪。它可以很好地工作一段时间,但是当绘制一定数量的图块时,我会收到内存警告,并最终导致应用程序崩溃。 我实际上会期望看不到的瓷砖在离开视口时会被丢弃。这似乎并没有发生,因此,最终,所有的瓦片将被吸引,这似乎是太多了iPhone内存... :(

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

回答

0

它听起来好像是不再被使用不被从内存中释放的瓷砖。什么是您的自定义替代的

- (void)drawRect:(CGRect)rect method 

样子?

相关问题