ios 只用3x图可以吗_iOS开发之0行代码加载NSBundle中的@2x与@3x图片

本文介绍了如何在iOS开发中,通过NSBundle对象的方法`pathForResource`加载本地图片资源,避免手动指定@2x或@3x。文中提供了一个Category方法,实现了自动识别设备屏幕倍率并加载相应尺寸图片的功能,减少了代码冗余和内存占用。
摘要由CSDN通过智能技术生成

本文只针对通过NSBundle对象的方法 pathForResource获取本地图片资源遇到的图片名无法自动识别@2x与@3x名称的问题进行测试、总结与分享。

加载本地图片资源的方式一般通过以下两种方法:

第1种:UIImage *img = [UIImage imageNamed:@"imageName"];

第2种:UIImage *img = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"imageName" ofType:@"imageType"]];

注:其他方法如NSData等本文不涉及,如需了解请找某哥或某娘,谢谢合作。

假定我们都知道第1种方法适合读取重复使用且占用内存小的图片资源,且能根据当前手机硬件能自动识别“@2x”图或“@3x”图。但如果需要加载不常使用且占用内存很大如上百kb甚至上M的图片资源的时候还使用这方式,内存占用势必会很严重。解决这种加载图片资源占用内存问题首选方案是换到第2种,但传入的资源名必须与“.后缀名”前的名称一致,如果资源名添加了“@2x”或“@3x”,而传入的resource名称带或不带“@2x”或“@3x”标识,结果分别会是怎么样的呢?下面我们来测试一下。

> 不带“@2x”或“@3x”标识:

4ec50c42d219682650c629d00afbb43a.png

> 带“@2x”或“@3x”标识

668219492abbdd8fe46418a834ca4842.png

显然传入的名称带标识后能正常获取到图片资源。

但现在我就是想能过第2种方法加载本地图片资源能像第1种方法一样,不需要传入带“@2x”和“@3x”的标识就能正常读取到图片资源,我们要怎么处理呢?

方法1:在每处都对当前设备进行判断,并保证输入的文件名正确,即Bundle里存在带或不带标识的资源图片文件。if(是@3x图设备) {

读取@3x资源图片路径;

}

else if (是@2x图设备) {

读取@2x资源图片路径;

}

else {

读取不带@2x和@3x资源图片路径;

}

但是请问有谁会愿意如上述方法在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值