ios图片加载方式与屏幕比例scale

在项目中,加载本地图片,一般就下面两种方式

//第1种方式:这种方式加载后会产生缓存
UIImage *image = [UIImage imageNamed:@"icon_post"];

//第2种方式:这种方式不会产生缓存,image释放后资源占用的内存会释放
NSString *image_url = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"icon_post"];
UIImage *image = [UIImage imageWithContentsOfFile:image_url];

如果我们在项目中每个切图都提供了1x,2x,3x;这两种方式,都会根据屏幕的scale加载不同尺寸(1x,2x,3x)的图片。

1.设备(scale=1),图片(2x,3x),系统(ios8/9)
第1种方式加载2x图片,第2种方式加载不到图片

2.设备(scale=1),图片(2x),系统(ios8/9)
第1种方式加载2x图片,第2种方式加载2x图片

3.设备(scale=1),图片(3x),系统(ios8/9)
第1种方式加载3x图片,第2种方式加载3x图片

4.设备(scale=2),图片(2x,3x),系统(ios8/9/10/11)
第1种方式加载2x图片,第2种方式加载2x图片

5.设备(scale=2),图片(1x,3x),系统(ios8)
第1种方式加载1x图片,第2种方式加载1x图片

6.设备(scale=2),图片(1x,3x),系统(ios9/10/11)
4s:第1种方式加载1x图片,第2种方式加载3x图片
4s之后:第1种方式加载1x图片,第2种方式加载3x图片

7.设备(scale=2),图片(3x),系统(ios8/9/10/11)
第1种方式加载3x图片,第2种方式加载3x图片

8.设备(scale=3),图片(2x,3x),系统(ios9/10/11)
第1种方式加载3x图片,第2种方式加载3x图片

9.设备(scale=3),图片(1x,2x),系统(ios9/10/11)
第1种方式加载2x图片,第2种方式加载2x图片

10.设备(scale=3),图片(2x),系统(ios9/10/11)
第1种方式加载2x图片,第2种方式加载2x图片

由于scale=1的设备仅有iPhone 3GS,iPhone 3G,iPhone,iPad,iPad2,iPad mini。
在现在的项目中,一般只提供了2x,3x两个尺寸的切图就好了;
在上面10种情况中,第一种情况的第2种加载方式会出现加载不到图片的情况,小则图片没法正常显示,大则出现异常;所以我们用第2种加载方式时,要判断是否scale=1,手动指定2x图片("icon_post@2x")则可以加载到2x图片

这篇文章列出了 iPhone, iPad 屏幕信息 可以参考。

你可能感兴趣的:(ios图片加载方式与屏幕比例scale)