从服务器下载@ 2x和@ 3x图像到Tableview

时间:2016-09-29 16:40:41

标签: ios uitableview image-size retina

我有一个tableview,它是从我下载的服务器上的图像填充的。我的问题是我如何为设备的不同分辨率获取不同的图像? 6 vs 6plus等?

我是否编写特定于设备的代码? e.g

if device is equal to 6 load @2x images 'from @2x url'
else if
device is equal to 6 plus load @3x images 'from @3x url'

等等。

或者有更有效的方法来解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

根据您要连接的后端技术堆栈,您有多种选择。

选项,如果您使用自己构建的自定义服务器,或控制代码:

  1. 将设备比例检测添加到您的图像服务中,以检查入站用户代理的设备比例,并为该设备提供适当的图像。如果您管理自己的后端,这可能是最简单的解决方案。

  2. 在API中写入一个url路径参数,用于提供适当的图像比例;然后,您可以使用UIScreen类(UIScreen.mainScreen().scale)相应地调整目标网址,例如:

    https://api.yourbackend.service/images/{imageid}/@2x.jpg
    

    这可能更难以实现,但它也更加强大(不依赖于可能更改的用户代理字符串),并且在记录或查询时更加清晰分析

  3. 您可能也可以使用类似retina.js之类的东西在后端处理此问题,但我无法告诉您它是否会无所事事(没有尝试过)它)。

  4. 如果您正在使用CDN图像主机,则选项:

    1. 使用内置的HiDPI支持(例如,Cloudinary提供此功能 - 阅读here)。

    2. 如果您的CDN不支持此功能,请切换为支持CDN的那个;)

答案 1 :(得分:1)

你正准备倒退。

表格视图单元格的图像视图很小。无论如何,您不会以全尺寸显示这些图像。因此,无论是下载越来越大的图像,只能以微小的尺寸显示,这一点毫无意义。这是浪费时间,带宽和最终内存的大量浪费(如果你真的试图在每个单元格中显示大图像,你将耗尽内存并崩溃)。

如果您可以选择从服务器检索的图像大小,则应该与您的建议完全相反:下载适合在表格中显示的图像的缩略图视图。如果缩略图的大小是图像视图的两倍,那么它在所有分辨率下看起来都会很好,而且内存浪费最少。

如果此应用程序还要在表格视图之外提取真正的完整大小的图像,则可以在用户请求时稍后执行此操作。