iOS应用程序中没有CATiledLayer的巨大图像?

我有一个约7000×6000像素的图像。 我需要这个在我的应用程序中的scrollview / imageView,但是这是巨大的方式来显示。 它应该是一种地图。 我希望能够将应用程序的大小保持在最低限度,图像大小约为13mb。 在PNG是超过100MB,这是不能接受的。 许多人build议CATiledLayer作为一个选项,但我相信这将导致更大的文件大小。 无论如何,我试图用CATiledLayer ,并在TileCutter中创build我自己的瓷砖,(瓷砖以.jpg为单位),尺寸不是太差。 但是我到处都有错误。 CATiledLayer的iOS版本对我来说是一个谜,我找不到解决这个问题的方法。 我得到一个错误,说有关java的等价“索引超出数组的界限”,即使该数组有内容在该特定的索引..它有一个方法返回一个数组。 该数组包含.plist的数据。 在返回之前,我注销了数组的内容,给了我很好的数据。 电话正试图访问

[array objectAtIndex:0]

并把它放在一个字典,但抛出OutOfBounds。 注销整个数组时,我可以清楚地看到内容,但是在注销时

 NSLog("%@",[method objectAtIndex]); I get the same exception. 

无论如何, CATiledLayer给了我一些问题。 我一直在逆向工程的PhotoScroller项目没有运气。 任何人都有其他的解决scheme

谢谢。

苹果有这个非常整洁的项目,PhotoScroller,它使用CATiledLayer,让你滚动几个图像,并放大。 直到我发现苹果“欺骗”并预先平铺了这些图像(大约有800块瓷砖作为文件保存在软件包中!

我需要一个类似的function,但不得不从networking上下载图像。 因此出现了PhotoScrollerNetwork 。 使用TiledImageBuilder,你可以下载(或从磁盘读取)大量的图像 – 我甚至testing了一个18000×18000的图像 – 它的工作原理。

这个类所做的是开始平铺图像下载(当使用libjpegturbo时)或可以保存文件然后平铺(需要更长的时间)。 该类指出需要多less级别的详细信息才能以全分辨率显示图像,并确定大小以适应包含的视图(滚动视图)。

这个类使用磁盘高速caching来保存磁贴,但是使用旧的Unix技巧来创build一个文件,将其打开,然后解除连接,这样磁贴就永远不会被保存 – 一旦类被处理掉了(文件描述符closures)瓷砖被释放(或如果你的应用程序崩溃,他们也得到释放。

有人在内存相当有限的iPad 1上遇到了问题,所以现在该课程在同时加载多个图像的时候,节约了对文件系统的使用。 我在今年与WWDC的iOS内核pipe理者进行了一次讨论,在向他解释节stream技术之后,他说(pipe理磁盘高速caching使用量的algorithm)可能是最好的技术。

我认为那些build议CATiledLayer是正确的。 你应该真的使用它! 如果您需要使用该技术显示巨大位图的示例项目,请看以下链接: http : //www.cimgf.com/2011/03/01/subduing-catiledlayer/

我们用Cocoa / Cocoa Touch开发者的许多技术都没有受到内心的影响,因为我们往往不了解这些技术,而使用这些技术似乎是一项艰巨的任务。 其中一种技术是在Core Animation中发现的,被称为CATiledLayer。 这似乎是一种神奇的技术,因为它的大部分实现都是一个黑盒子,这个事实有助于它被误解。 CATiledLayer只是提供了一种绘制非常大的图像,而不会造成严重的记忆打击。 无论你在哪里部署,这都很重要,但是在iOS设备上尤其重要,因为内存是宝贵的,当操作系统告诉你释放内存时,最好能够这样做,否则你的应用将被closures。 这篇博客文章的目的是为了说明CATiledLayer像广告一样工作,实现它并不像以前看起来那么困难。