如何在iOS应用中使用大量照片

时间:2015-07-19 10:31:33

标签: ios xcode

我正在创建一个iOS应用,我需要使用很多照片(大分辨率)。那里有近400张照片。我想用它们在UIImageView中显示在不同的页面上。 但它是一大堆数据。所以我害怕应用程序本身的有效(而不是那么多)和大小。在我的iOS应用中使用这些照片的最佳方式是什么?创建新图像集并为每张照片创建1x,2x和3x照片是否有意义,或者我是否必须使用我现在不想做的其他功能?

UPD1: 该应用程序是关于景点。从tableview用户可以选择任何视线,并将显示带有1-3张照片的屏幕(如果有超过1张照片,则显示在CollectionView中)和一些文字。我使用CoreData从sqlite db获取的所有数据(照片除外)。

屏幕上显示的照片宽度等于屏幕宽度(距离宽度25:38)。宽度更大:)

  1. 我想使用大分辨率照片,因为我想要显示全尺寸 点按照片。
  2. 每张照片最大可以是2000px或更多 侧。
  3. 该应用是一个离线应用,所以我想将照片存储在 应用程序。我现在只是关于图像资产。但还有其他方法吗? 存储照片?
  4. 我有一个想法是以高分辨率存储它们并调整大小到任何设备(3x,2x,1x)以在屏幕上显示。只需在用户点击它以在全屏显示照片时加载高分辨率版本的照片。

1 个答案:

答案 0 :(得分:2)

您无法加载应用中的所有照片 - 这是顺便说一句。因装载图像时出现内存问题而无法实现。

你应该在开始时考虑自己展示照片和照片。

  • 你真的需要以高分辨率显示照片吗?
  • 什么大分辨率意味着什么?那是1024x1024还是原生分辨率还是什么?
  • 从哪里加载这些照片?应用程序包含它还是您将从系统库加载它们?我看到你正在撰写关于图片资产的文章,可能你想把它们留在应用程序中。
  • 你是否需要在几乎0时间内显示这些图像?也许将它保留在后端并在必要时获取和缓存将是更好的方法。有了这个,你可以减少应用程序的大小。
  • 您可以只保留资产中最大的资源 - @ 3x,并在显示它之前在运行时将其调整大小。

要将照片保存在设备的内存中,您可以使用NSCache - Apple's Documentation并让系统管理照片。您将加载此缓存并在NSCache的实例中缓存,并且每次您想要访问它并获取照片时,您必须检查是否有照片或零,如果没有,则必须再次从中重新加载它磁盘。这将以某种方式使您的设备无法获得内存警告并自动管理照片。

  • 另一个重要的考虑因素是你计划如何展示照片。可以一次只显示1个还是有更多显示?你想要呈现它们的缩略图吗?用户选择一些照片后会以大分辨率显示它吗?使用缩略图将减少内存占用。

更新1

  

UPD1:该应用程序是关于景点。从tableview用户可以选择任何地方,并将显示1-3张照片的屏幕(如果有超过1张照片,则在CollectionView中)和一些文字。我使用CoreData从sqlite db获取的所有数据(照片除外)。

     

该应用是一个离线应用,所以我想在应用中存储照片。我现在只是关于图像资产。但还有其他存储照片的方法吗?

您不需要资产目录。只需将其保存在项目的某个目录中,并在必要时从/ Documents目录加载它们。 IMO这将是在本地存储和使用的最佳方法。将它们保存在资产中会导致xcassets文件中的@ 1x和@ 2x为空。我认为将它们直接保存在项目中将更容易维护。

  

我想使用大分辨率的照片,因为我想通过点击显示全尺寸照片。   每张照片最大可以是2000px或更多。

     

我有一个想法是以高分辨率存储它们并调整大小到任何设备(3x,2x,1x)以在屏幕上显示。当用户点击照片以在全屏显示照片时加载高分辨率。

在应用程序中保留如此大的照片是个糟糕的主意,应用程序会很大。即使一张照片将是1mb大小,我认为是不可能的,并且有400张照片,应用程序将会很胖。

你应该考虑将它们保持在线,真的。

您还知道应用程序中的所有图像,因此您可以实时创建缩略图并将其缓存在/ Cache目录中供以后使用。对于指定设备屏幕分辨率的大照片也一样。在显示之前调整它并保存在/ Cache目录中以备将来下次使用。