在iOS应用中的巨大图像,而不会CATiledLayer?(Huge images in iOS a

2019-06-27 06:37发布

我大概7000x6000px有一个形象。 我需要这是在我的应用程序滚动型/ ImageView的,但是这是后巨大的显示屏。 它应该是一种映射。 我希望能在应用程序的大小保持到最小,并且图像只是以.jpg 13MB。 以.png它是超过100MB,这是不可接受的。 许多人认为CATiledLayer作为一个选项,但我相信,这将导致更大的文件大小。 反正,我试图做到这一点的CATiledLayer ,并在TileCutter创建我自己的地砖,(以.jpg砖),而且规模不算太坏。 但我有所有的地方错误。 的iOS版本CATiledLayer是一个谜给我,我不能找到一种方法来解决这个问题。 我得到一个错误说一些关于Java的相当于“索引超出数组的界限”,即使阵列在特定的内容编制索引。它有它返回数组的方法。 该数组包含一个的.plist的数据。 回归之前,我注销阵列的内容,给了我很好的数据。 呼叫尝试访问

[array objectAtIndex:0]

并把它在字典中,但是罚球OutOfBounds。 当退出整个数组,我可以清楚地看到内容,但在注销

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

无论如何, CATiledLayer给了我什么,但问题。 我一直在逆向工程,没有运气的PhotoScroller项目。 任何人有任何其他的解决办法?

谢谢。

Answer 1:

苹果有这真的整洁工程,PhotoScroller,使用CATiledLayer,并让您通过几个图片滚动和缩放它们。 这似乎很整洁,直到我发现苹果的“欺骗”和预平铺图像(保存为包文件约800瓦!)

我需要一个类似的功能,却不得不从网络上下载的图片。 因此,来到约PhotoScrollerNetwork 。 随着TiledImageBuilder你可以下载(或从磁盘读取)海量图片 - 我甚至测试了18000x18000的图像 - 和它的作品。

这是什么类做的就是启动平铺图像,因为它的下载(使用时libjpegturbo),或者可以保存文件,然后平铺(需要更长的时间)。 类数字如何细节的许多水平需要显示在全分辨率图像和尺寸适合在含有图(滚动视图)。

该类使用的磁盘缓存来保存砖,但使用和创建一个文件,打开它,然后断开链接它,这样瓷砖从来没有真正得到保存的旧的Unix绝招 - 一旦类dealloced(和文件描述符关闭)的瓦片被释放(或者,如果您的应用程序崩溃,他们得到解脱出来了。

有人曾在iPad 1与它相当有限的内存问题,所以类现在节流其使用的文件系统时同时加载多个图像。 今年我曾与在WWDC iOS的内核管理者的讨论,并解释节流技术,他后,他说,该算法(在管理磁盘缓存的使用量)大概是可以使用的最好的技术。



Answer 2:

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

我们作为可可/可可触摸开发人员使用多种技术站不变通过微弱的心脏,因为往往我们根本不理解他们,聘请他们似乎是一项艰巨的任务。 其中一个技术的核心动画被发现,作为CATiledLayer被称为。 这似乎是一个神奇的排序技术,因为这么多它的实现是一个黑盒的,这一事实有助于它被误会。 CATiledLayer只是提供了一种方法来绘制非常大的图像,而不会导致严重的记忆命中。 这是很重要的,不管你部署在哪里,但它特别是在iOS设备上的问题,内存是宝贵的,当操作系统告诉你要释放内存,你最好能够做到这样或您的应用程序将被击落。 本博客文章是为了证明CATiledLayer像宣传的那样,实施它是不是很难,因为它可能曾经看起来。



文章来源: Huge images in iOS app without CATiledLayer?