我有一个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'
等等。
或者有更有效的方法来解决这个问题吗?
答案 0 :(得分:2)
根据您要连接的后端技术堆栈,您有多种选择。
将设备比例检测添加到您的图像服务中,以检查入站用户代理的设备比例,并为该设备提供适当的图像。如果您管理自己的后端,这可能是最简单的解决方案。
在API中写入一个url路径参数,用于提供适当的图像比例;然后,您可以使用UIScreen
类(UIScreen.mainScreen().scale
)相应地调整目标网址,例如:
https://api.yourbackend.service/images/{imageid}/@2x.jpg
这可能更难以实现,但它也更加强大(不依赖于可能更改的用户代理字符串),并且在记录或查询时更加清晰分析
您可能也可以使用类似retina.js
之类的东西在后端处理此问题,但我无法告诉您它是否会无所事事(没有尝试过)它)。
使用内置的HiDPI支持(例如,Cloudinary提供此功能 - 阅读here)。
如果您的CDN不支持此功能,请切换为支持CDN的那个;)
答案 1 :(得分:1)
你正准备倒退。
表格视图单元格的图像视图很小。无论如何,您不会以全尺寸显示这些图像。因此,无论是下载越来越大的图像,只能以微小的尺寸显示,这一点毫无意义。这是浪费时间,带宽和最终内存的大量浪费(如果你真的试图在每个单元格中显示大图像,你将耗尽内存并崩溃)。
如果您可以选择从服务器检索的图像大小,则应该与您的建议完全相反:下载适合在表格中显示的图像的缩略图视图。如果缩略图的大小是图像视图的两倍,那么它在所有分辨率下看起来都会很好,而且内存浪费最少。
如果此应用程序还要在表格视图之外提取真正的完整大小的图像,则可以在用户请求时稍后执行此操作。