iOS 图片名不带@2x、@3x,简单缩放适配屏幕分辨率

适应场景:图片没有按照iOS标准命名,不带@2x、@3x,需要自己进行缩放。

解决思路:

<p>
1、修改文件名,给所有图片都重命名。因为不同分辨率图片都按照文件夹分类好了,只需要到对应文件夹修改名字就好。这个在我的场景下不成功。

2、缩放图片,重新绘制图片。对于特别大的图片,性能会存在问题,所以只适用于本地的小图片。

- (UIImage *)autoScaleImageWithName:(NSString *)name
{
    UIImage *image = [UIImage imageNamed:name];
    
    CGFloat scale = [UIScreen mainScreen].scale;
    CGSize size = CGSizeApplyAffineTransform(image.size, CGAffineTransformMakeScale(1/scale, 1/scale));
    
    UIGraphicsBeginImageContextWithOptions(size, NO, scale);
    [image drawInRect:(CGRectMake(0, 0, size.width, size.height))];
    UIImage *returnImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    return returnImage;
}
简单之后:

猜测一下imageNamed的实现方式

1、加载资源。
<p>

  • 图片引入
ImportImage.png
  • 图片引入后的变化

BuildPhases.png

<p>
能看到Build Phases -> Copy Bundle Resources 里面也增加了图片资源,这就是平常使用[NSBundle mainBundle]里面寻找的资源了,包括图片、storyboard、xib等等。imageNamed就会到mainBundle里找到符合名字的图片。

2、屏幕分辨率判断。

为什么常用的是imageNamed而不是imageWithContentsOfFile原因之一也是这个,imageNamed内部应该是做了分辨率判断的,判断的规则很简单,@2x适用2倍屏幕,@3x适用3倍屏幕,其他的都按照1倍处理。至于真正怎么处理的,应该比我的这个缩放要高级一些。(PS:缩放确实是自己能想到的办法)

3、缓存。

imageNamed更常用于图标这类的小图片,因为它做了缓存处理。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容