我是iOS开发的新手,正在开发我的第一个认真的应用程序(Objective C)。
我正在使用外部API,并且已经达到了我需要从所述API下载图像以保持脱机状态作为缓存的程度。
现在,如果我理解正确,我可以使用资产目录在XCode上将图像添加到我的应用程序。例如,如果我添加image@1X.png,image @ 2X.png和image@3X.png版本的图像,为了以后使用它们我只需要向iOS提供“图像”部分它会自动返回当前使用的设备的版本适用。
但是我不能在运行时将图像添加到资产目录 - 我必须从图像URL创建一个NSData并将其保存到Documents文件夹。
问题是,这个API给了我一堆URL,用于我需要下载的图像的不同版本,其中包括@ 2X,@ 3X等版本的图像,所以我需要下载所有版本并使用检索适用于设备的资产目录功能。
我怎样才能做到这一点?
非常感谢您的帮助,如果我出错了,请纠正我。
答案 0 :(得分:2)
因此我需要下载所有版本并使用资产目录功能检索适用于设备的版本。
你不需要。我们在资产目录中添加了2x和3x图像,因为我们不知道我们的应用运行的设备。但在你的情况下,你需要在运行时知道这一点,所以你已经知道设备是什么。
要获取设备的比例因子,您可以执行以下操作:
SharedPreferences sharedPreferences = getSharedPreferences("Date", MODE_PRIVATE);
Map<String, ?> allEntries = sharedPreferences .getAll();
for (Map.Entry<String, ?> entry : allEntries.entrySet()) {
Log.d("map values", entry.getKey() + ": " + entry.getValue().toString());
}
因此,对于2x,这将返回2,对于3x,它将返回3.
通过这种方式,您可以了解从API下载所需的正确图像,而不是将其全部下载,这会增加不必要的开销。
答案 1 :(得分:1)
您可以查看UIImageAsset上的文件是否符合您的要求
另外正如您所说的iOS开发较新,您也可以检查文件系统文档,这有助于您更好地理解和管理文件 File System basics
编辑:正如sateesh和patchdiaz所提到的,为特定设备仅下载单一分辨率图像而不是下载设备的所有分辨率图像将是更好的解决方案