ios 只用3x图可以吗_iOS 图片 @2x与@3x区别
一部好看的电影《看不见的客人》,老年人被逼无奈的情况下,激发了他们的最大潜能,逼凶手认罪伏法。有些时候,人都是被逼的...
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区别相关推荐
- iOS @2x @3x图的区别和理解
苹果官方网页介绍: Icons and Images - Apple Developer iOS用于在屏幕上放置内容的坐标系统是基于点的度量,点映射到屏幕上的像素.标准分辨率显示器的像素密度为1:1( ...
- ios 只用3x图可以吗_对于仅限iPhone的iOS 7应用,我们只能包含@ 3x图像吗?
是的,你可以,但你不应该. 如果您只添加@ 3x图像,它将减少您的捆绑包大小,并与所有屏幕密度兼容. 不过,我不建议这样做.仅嵌入@ 3x图像将导致您的图像在每次运行应用程序时缩小.这种方法有以下缺点 ...
- iOS开发:图片加载@2x与@3x
一.图片格式@2x与@3x 应对非视网膜和视网膜屏,APP有时会提供不同大小的图片,1倍图和2倍图和3倍图,它们的像素与1倍数图相比相差2倍或者3倍. 命名规则:2倍图在1倍图的名字后加 @2x 普通 ...
- iOS pdf矢量图代替多倍图
iOS中图片有@2x.@3x多倍图,如果app中用到的图片太多,最后包会比较大,从xcode 6开始,提供了pdf矢量图来代替多倍图,只要加入一个pdf图,可代替所有设备上的多倍图. 1.创建工程后, ...
- android与ios ui切图关系,iOS、Android 开发单位换算及 UI 切图要求
在移动端 UI 设计中,经常会用到的单位有 4 种:px.pt.dp 和 sp,很多人分辨不清这几种单位及其换算关系,以及 iOS 和 Android 的切图要求,我在这里做下简单的介绍,希望大家读完 ...
- ios 更新尺寸调用什么方法_iOS开发:iPhone尺寸和适配
1:iPhone尺寸规格 尺寸表格:1 inch(英寸) = 2.54cm = 25.4mm 2:屏幕尺寸 我们通常所说的iPhone5屏幕尺寸为4英寸.iPhone6屏幕尺寸为4.7英寸,指的是显示 ...
- iOS使用矢量图的总结
转自:http://lugede.cn/ios-use-vector-pdf-image 原理 苹果最擅长使用障眼法,之前是障用户的眼,现在又来障开发者.XCode6的这个"支持矢量图&qu ...
- iOS端矢量图解决方案汇总
Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 作者 | 小猪 来源 | 小猪的博客 https: ...
- 移动APP切图术语解读:什么是@1x @2x和@3x【转自25学堂】
现在很多APP设计师小白都会稀里糊涂的在解读这些缩放1倍,扩大2倍或者说扩大1.5倍 等等之类的言论. 大家谈论的却是也没有错.如果你搭配上@1x @2x和@3x的话,你的理解就有问题啦! 首先我们看 ...
最新文章
- 《Linux内核设计与实现》读书笔记(十六)- 页高速缓存和页回写
- python库怎么学啊最好_最常用的几个python库--学习引导
- android高德地图自定义图层,自定义图层-Canvas
- 由浅入深理解索引的实现(2)【转】
- Python正则表达式详解
- android studio 第一个画面设定,2.3 使用Android Studio 简单设计UI界面
- 确保着法合规:象棋通用规则解析
- 国外问卷调查赚钱网站
- 【杂篇 · 虚拟机】win11安装虚拟机
- [转]ASP.Net+XML打造留言薄
- 网页搜索(百度谷歌)你不得不知道的十个小技巧
- 古典概型——概率论与数理统计(宋浩)
- mysql报错(Not unique table/alias)
- vtk中的win32窗口
- 廖宇靖正式回应陈晓旭之子传闻啦~
- 计算机制图符号制作,基本流程图的制作-通过在线制图工具绘制
- 恒大威武!关于SQL的一些基础知识整理回顾
- 一键启动u盘的快捷键查询表
- Oracle Distilled网站下的TimesTen相关帖子
- 解释黑天鹅乱飞的2016年的几个法则
热门文章
- 蓝牙耳机什么牌子好?500内好用的蓝牙耳机推荐
- 山东大学软件学院创新实训——飞讯(二)
- linux挂载u盘时显示只读文件系统,不能在里面进行新建复制操作
- Mysql8 和mysql 5.7 的区别
- JS类型转换常见方法
- 无人货架:围绕人的「无人」之战
- 02-线性系统稳定性及劳斯判据
- 羽化效果的HeatMap
- Error: (‘IM002‘, ‘[IM002] [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序‘)
- 感谢博客园*暮夏*的系列文章--PHP一个重要的学习工具