一部好看的电影《看不见的客人》,老年人被逼无奈的情况下,激发了他们的最大潜能,逼凶手认罪伏法。有些时候,人都是被逼的...

28号面试了一位同僚,想起了之前腾讯电话面试我的一个问题,@2x和@3x的图片有啥区别,如果将@2x的图片放在@3x的屏幕上会有什么效果,反之呢。候选人的回答让我想起了曾经的自己。

2007年初代iPhone 3GS,320x480像素。一个点是一个像素。

2010年iPhone4发布,使用Retina显示屏,尺寸还是320*480,但像素为640x960。一个点是两个像素。

2014年iPhone6s Plus发布,尺寸是414736,像素为12422208。一个点是三个像素。

假设图片 example.png,大小为 30 x 40像素(这里的单位是像素,数字图片的单位通常都为像素)。当这张example.png在iPhone 4中使用时候,都占据屏幕上30 x 40个点。而因为iPhone 4中1个点等于2个像素,也就是30 x 40像素的图片,占据了60 x 80像素的屏幕,因此这图片在iPhone 4中看起来就会模糊。所以图片的像素应该为60*80像素。

在iPhone 6 Plus中,还出现3x模式,原理是一样的。

开发中美工切图要@2x和@3x的各一张,( @1x的(iPhone 3GS)已经淘汰了,所以不用切图 )。

1547050556930.jpg

例如:

example@2x.png // 60 x 80像素

example@3x.png // 90 x 120像素

当程序中使用example.png的时候,会根据屏幕模式自动选择对应的图片。屏幕2x模式,就会选择

example2x.png, 3x模式就会优先选择example@3x.png,假如example@3x.png不存在,就选择

example2x.png。

若@3x的图片放在@2x的屏幕上面,不会有任何问题,因为6080像素的图片堆积在3040的像素里,图片会更清晰。

Simulator Screen Shot - iPhone 6s - 2019-01-06 at 21.09.11.png

若@2x的图片放在@3x的屏幕上面,3040像素的图片放在需要放6080像素的图片里,图片会模糊失真。

@2x图片放在@3x屏幕上

IMG_2393.PNG

@3x图片放在@3x屏幕上

IMG_2394.PNG

加载图片方式

20160929093507359.png

-(void)setImageView1{

UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 80, 240, 150)];

imageView.backgroundColor = [UIColor whiteColor];

//只有test@2x与test@3x图片

//4s 5 5s 6 6s 会自动加载test@2x图片

//6Plus 6sPlus 会自动加载test@3x图片

imageView.image = [UIImage imageNamed:@"front"];

[self.view addSubview:imageView];

}

-(void)setImageView2{

//此处的路径是物理路径如果是逻辑路径是获取不到资源的

//这里填写test@2x或者test@3x都可以(只要这个文件在wwwwww这个文件夹真实存在即可),主要是获得这个物理路径。

//获得到这个路径之后 后边才会根据设备自动加载@2x图片或者@3x图片。

NSString *path = [[NSBundle mainBundle] pathForResource:@"wwwwww/test@2x" ofType:@"png"];

NSLog(@"path = %@",path);

//因为www是逻辑路径,用此方法是加载不到这个文件的

NSString *path1 = [[NSBundle mainBundle] pathForResource:@"www/test@2x" ofType:@"png"];

//所以path1的值为null;

NSLog(@"path1 = %@",path1);//path1 = null;

UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 80, 240, 150)];

imageView.backgroundColor = [UIColor blueColor];

//4s 5 5s 6 6s 会自动加载test@2x图片

//6Plus 6sPlus 会自动加载test@3x图片

imageView.image = [UIImage imageWithContentsOfFile:path];

[self.view addSubview:imageView];

}

imageNamed与imageWithContentOfFile的区别

myImage = [UIImage imageNamed:@"icon.png"];这种方法在一些图片很少,或者图片很小的程序里是ok的。但是,在大量加载图片的程序里,请千万不要这样做。为什么呢 ??????

这种方法在application bundle的顶层文件夹寻找由供应的名字的图象 。 如果找到图片,装载iPhone系统缓存图象。那意味图片是(理论上)放在内存里作为cache的。试想你图片多了,是什么后果,图片cache极有可能不会响应 memory warnings and release its objects。

NSString *path = [[NSBundle mainBundle] pathForResource:@”icon” ofType:@”png”];

myImage = [UIImage imageWithContentsOfFile:path];

NSString *filePath = [[NSBundle mainBundle] pathForResource:fileName ofType:extension];

NSData *image = [NSData dataWithContentsOfFile:filePath];

[UIImage imageWithData:image];

1.用imageNamed的方式加载时,系统会把图像Cache到内存。如果图像比较大,或者图像比较多,用这种方式会消耗很大的内存,而且释放图像的 内存是一件相对来说比较麻烦的事情。例如:如果利用imageNamed的方式加载图像到一个动态数组NSMutableArray,然后将将数组赋予一 个UIView的对象的animationImages进行逐帧动画,那么这将会很有可能造成内存泄露。并且释放图像所占据的内存也不会那么简单。但是利 用imageNamed加载图像也有自己的优势。对于同一个图像系统只会把它Cache到内存一次,这对于图像的重复利用是非常有优势的。例如:你需要在 一个TableView里重复加载同样一个图标,那么用imageNamed加载图像,系统会把那个图标Cache到内存,在Table里每次利用那个图 像的时候,只会把图片指针指向同一块内存。这种情况使用imageNamed加载图像就会变得非常有效。

2.利用NSData方式加载时,图像会被系统以数据方式加载到程序。当你不需要重用该图像,或者你需要将图像以数据方式存储到数据库,又或者你要通过网络下载一个很大的图像时,请尽量使用imageWithData的方式加载图像。

ios 只用3x图可以吗_iOS 图片 @2x与@3x区别相关推荐

  1. iOS @2x @3x图的区别和理解

    苹果官方网页介绍: Icons and Images - Apple Developer iOS用于在屏幕上放置内容的坐标系统是基于点的度量,点映射到屏幕上的像素.标准分辨率显示器的像素密度为1:1( ...

  2. ios 只用3x图可以吗_对于仅限iPhone的iOS 7应用,我们只能包含@ 3x图像吗?

    是的,你可以,但你不应该. 如果您只添加@ 3x图像,它将减少您的捆绑包大小,并与所有屏幕密度兼容. 不过,我不建议这样做.仅嵌入@ 3x图像将导致您的图像在每次运行应用程序时缩小.这种方法有以下缺点 ...

  3. iOS开发:图片加载@2x与@3x

    一.图片格式@2x与@3x 应对非视网膜和视网膜屏,APP有时会提供不同大小的图片,1倍图和2倍图和3倍图,它们的像素与1倍数图相比相差2倍或者3倍. 命名规则:2倍图在1倍图的名字后加 @2x 普通 ...

  4. iOS pdf矢量图代替多倍图

    iOS中图片有@2x.@3x多倍图,如果app中用到的图片太多,最后包会比较大,从xcode 6开始,提供了pdf矢量图来代替多倍图,只要加入一个pdf图,可代替所有设备上的多倍图. 1.创建工程后, ...

  5. android与ios ui切图关系,iOS、Android 开发单位换算及 UI 切图要求

    在移动端 UI 设计中,经常会用到的单位有 4 种:px.pt.dp 和 sp,很多人分辨不清这几种单位及其换算关系,以及 iOS 和 Android 的切图要求,我在这里做下简单的介绍,希望大家读完 ...

  6. ios 更新尺寸调用什么方法_iOS开发:iPhone尺寸和适配

    1:iPhone尺寸规格 尺寸表格:1 inch(英寸) = 2.54cm = 25.4mm 2:屏幕尺寸 我们通常所说的iPhone5屏幕尺寸为4英寸.iPhone6屏幕尺寸为4.7英寸,指的是显示 ...

  7. iOS使用矢量图的总结

    转自:http://lugede.cn/ios-use-vector-pdf-image 原理 苹果最擅长使用障眼法,之前是障用户的眼,现在又来障开发者.XCode6的这个"支持矢量图&qu ...

  8. iOS端矢量图解决方案汇总

    Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 作者 | 小猪  来源 | 小猪的博客 https: ...

  9. 移动APP切图术语解读:什么是@1x @2x和@3x【转自25学堂】

    现在很多APP设计师小白都会稀里糊涂的在解读这些缩放1倍,扩大2倍或者说扩大1.5倍 等等之类的言论. 大家谈论的却是也没有错.如果你搭配上@1x @2x和@3x的话,你的理解就有问题啦! 首先我们看 ...

最新文章

  1. 《Linux内核设计与实现》读书笔记(十六)- 页高速缓存和页回写
  2. python库怎么学啊最好_最常用的几个python库--学习引导
  3. android高德地图自定义图层,自定义图层-Canvas
  4. 由浅入深理解索引的实现(2)【转】
  5. Python正则表达式详解
  6. android studio 第一个画面设定,2.3 使用Android Studio 简单设计UI界面
  7. 确保着法合规:象棋通用规则解析
  8. 国外问卷调查赚钱网站
  9. 【杂篇 · 虚拟机】win11安装虚拟机
  10. [转]ASP.Net+XML打造留言薄
  11. 网页搜索(百度谷歌)你不得不知道的十个小技巧
  12. 古典概型——概率论与数理统计(宋浩)
  13. mysql报错(Not unique table/alias)
  14. vtk中的win32窗口
  15. 廖宇靖正式回应陈晓旭之子传闻啦~
  16. 计算机制图符号制作,基本流程图的制作-通过在线制图工具绘制
  17. 恒大威武!关于SQL的一些基础知识整理回顾
  18. 一键启动u盘的快捷键查询表
  19. Oracle Distilled网站下的TimesTen相关帖子
  20. 解释黑天鹅乱飞的2016年的几个法则

热门文章

  1. 蓝牙耳机什么牌子好?500内好用的蓝牙耳机推荐
  2. 山东大学软件学院创新实训——飞讯(二)
  3. linux挂载u盘时显示只读文件系统,不能在里面进行新建复制操作
  4. Mysql8 和mysql 5.7 的区别
  5. JS类型转换常见方法
  6. 无人货架:围绕人的「无人」之战
  7. 02-线性系统稳定性及劳斯判据
  8. 羽化效果的HeatMap
  9. Error: (‘IM002‘, ‘[IM002] [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序‘)
  10. 感谢博客园*暮夏*的系列文章--PHP一个重要的学习工具