使用更少的图片来适配通用应用程序的非Retina、Retina和Retina HD设备(@1x,@2x,@3x)。

4
为了支持通用设备上的iOS 7到8,我必须制作4个不同尺寸的相同图像副本。
对于iPhones: image@2x.png(iPhone 4s、5、5s、6) image@3x.png(iPhone 6+)
对于iPads: image.png(iPad 2、iPad mini 1) image@2x.png(iPad 3、4、iPad mini 2、iPad Air)
这些图像实际上使应用程序的大小变得更大。
只使用一种图像尺寸,即该组中最大的图像并将其缩放以适应uiimageview,然后使用图像视图在较小的屏幕上缩小图像,是否可行?
imageView.contentMode = UIViewContentModeScaleAspectFit;
或者绝对有必要拥有所有4个不同尺寸的副本吗?
它在模拟器上的所有设备上都可以工作,并且在视网膜iPad 3上也可以工作,但我无法在其他设备上进行实际测试,担心图像可能无法显示。
有人尝试过只使用一个大图像而不是一组副本吗?

2
你误解了高分辨率的意义。Retina设备拥有更高分辨率的屏幕 - 每英寸像素更多(ppi)。这意味着仅将图像缩放以适应所需框架并不能使其在不同屏幕上看起来像应该的样子。你所说的方法可以行得通,但它比作为开发人员放置自己名字的东西所应接受的标准要低。如果你遇到应用程序大小问题,我建议你查看哪些图标等可以重复使用,并验证你拥有的所有图像资产是否确实具有正确的分辨率。 - kpsharp
1
你是否已经使用像ImageOptim这样的压缩工具来处理你的图片? - Jon Shier
1
如果这些图像是矢量图,最好在运行时用代码绘制它们。PaintCode这样的工具可以帮助实现这一点。 - rob mayoff
谢谢提供ImageOptim的技巧,它可以在不损失质量的情况下减小约50%的大小。但是,如果我只使用最大的一组图像(针对iPad retina制作),并且将它们命名为没有@2x、@3x的名称,它们仍然可以在模拟器中加载所有设备(包括非retina设备),而最终的图像大小比使用4组还要小60%。 - theMouse
1个回答

5
是的,理论上您可以使用最大分辨率的图像,并使用模式Aspect Fit使UIImageView缩小图像。
唯一的缺点是不支持Retina的旧手机性能较差。例如,在UITableView的单元格上使用图像并滚动时,设备必须加载大图像,然后将图像缩小并同时滚动,这会导致旧的、较慢的设备出现停顿。
因此,也许只需在列表视图中使用多个图像(应该只是缩略图,而且非常小,或者只在这里使用较小的图像),但不要担心停留在屏幕上不滚动的大图像。
确保您使用允许缓存的方法(如imageNamed:)在列表视图中加载图像。
只要考虑到缩小图像所涉及的性能惩罚,就可以使用最大图像并将其缩小以适应。
顺便说一句,我已经在App Store的真实应用程序中使用了这种技术。
另一种技术是包含较低质量的图像(1x或2x),如果在更高分辨率的设备上运行(2x或3x),则会自动从Web上下载高分辨率的图像。可能需要注意的是,只在wifi上下载。

感谢您的回答,我支持的唯一非Retina设备是iOS 7及以上版本的iPad 2和iPad mini 1。而且我正在按照您建议的使用imageNamed:加载图像。感谢您确认该技术的有效性。 - theMouse
1
此外,苹果提高了您可以通过蜂窝网络下载的应用程序的最大大小。现在是100MB(之前为50MB)。 - Marcus Adams
更简单的方法是上传最高分辨率的图像,然后处理2x和3x的业务。如果您使用最小尺寸2208x2208,则应该覆盖所有设备。将您的图像通过一些压缩软件运行,您可以减小文件大小。这里有一些信息:http://www.paintcodeapp.com/news/ultimate-guide-to-iphone-resolutions - Johnny Rockex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接