Ios 对非视网膜、视网膜和视网膜HD(1x、@2x、@3x)的通用应用程序使用更少的图像

Ios 对非视网膜、视网膜和视网膜HD(1x、@2x、@3x)的通用应用程序使用更少的图像,ios,xcode,uiimageview,universal,Ios,Xcode,Uiimageview,Universal,为了在通用设备上支持iOS 7到8,我必须制作4份大小不同的相同图像副本 对于iPhone image@2x.png(iphone 4s、5、5s、6) image@3x.png(iphone 6+) 对于iPad image.png(ipad 2、ipad mini 1) image@2x.png(iPad3、4、iPadMini2、iPadAir) 这些图片真的让应用程序的大小膨胀了 是否可以只使用1个图像大小(设置和缩放中最大的一个)来适应uiimageview,并使用图像视图在较小的屏幕

为了在通用设备上支持iOS 7到8,我必须制作4份大小不同的相同图像副本

对于iPhone image@2x.png(iphone 4s、5、5s、6) image@3x.png(iphone 6+)

对于iPad image.png(ipad 2、ipad mini 1) image@2x.png(iPad3、4、iPadMini2、iPadAir)

这些图片真的让应用程序的大小膨胀了

是否可以只使用1个图像大小(设置和缩放中最大的一个)来适应uiimageview,并使用图像视图在较小的屏幕上缩小图像

imageView.contentMode=UIViewContentModeScaleAspectFit

或者是绝对有必要拥有所有4份不同大小的副本

它可以在模拟器和视网膜iPad3上的所有设备上运行,但我无法在其他设备上进行实际测试,并且担心图像可能无法显示


是否有人尝试使用1个大图像而不是副本集?

是的,理论上可以使用最大分辨率的图像,并让UIImageView使用模式
Aspect Fit
将图像缩小

唯一的缺点是,不支持视网膜的老式手机性能也较差。例如,当在UITableView的单元格上使用图像并滚动时,设备必须加载大图像,然后缩小图像,同时滚动图像,并且在旧的、较慢的设备上会结巴

因此,也许只需在列表视图中使用多个图像(应该只是缩略图,而且很小,或者只需在此处使用较小的图像),但不要担心较大的图像会停留在屏幕上而不会滚动

确保使用允许缓存的方法(如
imagename:
)在列表视图中加载图像

只要考虑到缩小图像所涉及的性能损失,就可以只使用最大的图像并将其缩小到合适的大小

顺便说一下,是的,我在应用商店的实时应用程序中使用过这种技术


我见过的另一种技术是包含较低质量的图像(1x或2x),如果在更高分辨率的设备(2x或3x)上运行,则自动从web下载高分辨率图像。也许你可以把它们放在电脑上下载。

你误解了更大尺寸的意义。视网膜设备的屏幕分辨率更高,每英寸像素(ppi)更多。这意味着,仅仅将图像缩放到所需的帧中,实际上并不能使它在不同的屏幕上看起来像应该的那样。你所说的是可行的,但这是一个低于你作为开发人员应该接受的标准。如果你有应用程序大小的问题,我会看看哪些图标和什么你可以重用,也许会验证你所有的图像资产确实是正确的分辨率。你有没有通过像ImageOptim这样的粉碎工具运行你的图像?如果图像是矢量艺术,你最好在运行时用代码绘制它们。像PaintCode这样的工具可以帮助实现这一点。感谢关于ImageOptim的提示,它可以在不损失质量的情况下将尺寸减小约50%。但是,如果我只使用最大的一组图像(为iPad视网膜制作),并将它们命名为不带@2x、@3x的图像,它们仍然会加载到所有设备(包括非视网膜)的模拟器中,最终图像大小比有4组图像小60%。感谢您的回答,我支持iOS 7以上版本中唯一的非视网膜设备是iPad2和iPadMini1。我正在按照你的建议加载图像,图像名为:谢谢你确认这项技术有效。此外,苹果提高了你可以通过手机下载的最大应用程序大小。现在是100MB(原来是50MB)。只需上传最高分辨率的图像并使用2倍和3倍的业务即可轻松完成。如果使用最小尺寸2208x2208,则应覆盖所有设备。通过一些压缩软件运行你的图像,你会缩小尺寸。以下是一些信息: