2017-02-02 38 views
0

我打算推出至少20张图片,每张图片大小可以为10mb。它们是用户可能会放大的图片,因此需要保持较高的分辨率。我们仍然试图让它们变得更小,但即便如此,它们不太可能每个都小于7mb。在iOS中存储大图片swift

图像可以与应用程序一起发货,也可以下载其他图片。要求用户在下载图片后可以离线使用,因为研究人员将在偏远地区使用该应用程序。

什么是最好的机制来存储它们,我应该如何将它们存储在iOS Swift 3中?

感谢您的帮助提前。

+1

首先,这与Swift3无关。由于资产与编程语言无关。对于这个大文件,它对瓦片有意义。此处演示:https://developer.apple.com/library/content/samplecode/PhotoScroller/Introduction/Intro.html – rckoenes

回答

2

您可以将图片存储在应用程序的文档目录中,并将路径存储在SQLite数据库中。

2

没有规则,而是一组最佳实践。
为了存储它们,我建议你直接将它们保存到你的资源中,而不是Xcode图像资源,这是因为“图像资源”只能用UIImage的方法来调用,它具有缓存图像的副作用。
然后,您可以创建一个带有一组图像名称的plist文件,并从这里获取您的信息。如果你需要一些更复杂的核心数据,但是我不能在你的规范中看到它的应用。

内存中未压缩图像的大小是多少?
以字节为单位的一个大约 方程n_pixel_height * n_pixel_width * n_channels(假定为信道的8位)

如果图像是10MB左右以jpg它们被压缩,从而意味着它们将采取大量的内存。这种设备上的内存是一个宝贵和短的资源。
如果你的应用程序超过了内存限制,经过一系列的回调,如didReceiveMemoryWarning,如果你没有释放足够的内存,你的应用程序将被终止。
在这种情况下,不要在模拟器上尝试设备,因为模拟器使用您的mac资源。
现在如何处理大图片?
你可以使用CATiledLayer,你可以在网上找到很多教程。 CATiledLayer顾名思义就是创建一个图层,每个图块都应该对应一张图片,并且只有当图片可见时才会绘制它们。
不幸的是,它异步绘制,这意味着你的瓷砖可以不完全显示在同一时间,有一些策略可以避免这个问题,其中一个解释在苹果sample code
当然有一个问题需要解决,我怎样才能把我的大图像切割成瓷砖?
你可以通过编程方式或提供它们作为你的应用程序的资源已被剪切