新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
Assets.xcassets不同压缩设置下的assets.car文件对比
创新互联公司成都网站建设按需制作,是成都营销推广公司,为成都宴会酒店设计提供网站建设服务,有成熟的网站定制合作流程,提供网站定制设计服务:原型图制作、网站创意设计、前端HTML5制作、后台程序开发等。成都网站营销推广热线:13518219792
assets.car文件查看
actool打包xcassets为Assets.car命令
图片的加载方式 iOS 目前有2种:
1.Resource 它是指inageWithContentsFile:创建图片的图片管理方式;
2.ImageAssets 它是指使用imageNamed:创建图片的图片的管理方式;
UIImage内存处理:
真是的App开发中,常用的无非是1和2两种方式
1的优缺点:
1的使用方式:NSString *path =[[NSBundle mainBundle]pathForResource:@"image@2x" type:@"png"];
UIImage *image = [UIImage imageWithContentsOfFile:path];
1的内部实现方式:+ (instancetype)imageWithContentsOfFile:(NSString *)fileName {
NSUInteger scale = 0;
{
scale = 2;//这一部分是提取fileName中@号后面的那个数字,如果存在则为1
}
return [[self alloc] initWithData:[NSData dataWithContentsOfFile:fileName scale:scale]];
}
这种方式使用的时候会有个局限性,这个图片必须是在.ipa的根目录或者沙盒中。根目录就是把图片文件拖到工程中,沙盒中的图片是写入进去或者存进去的;
1的特性:在1的图片管理方式中,所有的图片创建都是通过读取文件数据得到的,读取一次文件数据就会产生一次NSData以及产生一个UIImage,当图片创建好后会销毁对应的NSData,当UIImage的引用计数变为0的时候自动销毁UIImage,这样的话就可以保证图片不会长期存在内存中。
1的使用场景:由于这种方法的特性,所以1得方法一般用在图片数据很大,图片一般不需要多次使用的情况,比如引导页面的背景(图片全屏),有时候运行APP才显示,有时候根本就用不到。
1的优点:图片的生命周期可以得到管理,当需要图片的时候就创建一个,当不需要图片的时候就让他销毁,图片不会长期的保存在内存中,因此不会有内存浪费,在减少大图的内存占用中,1方式优先。
2的方式:2的设计初衷主要是为了解决自动适配Retian屏和非Retian屏,也就是说为了解决iPhone4和iPhone3GS以及以前的机型的屏幕适配,虽然没有3GS了,但是plus出来了,需要3x
2的使用方式:UIImage *image = [UIImage imageName:@"image"];
2的特性:与1相似,2也是从图片文件中读取图片数据转化成UIImage,只不过这些图片都打包在2中,最大的区别就是图片有缓存。相当于与一个字典,key是图片名,value是图片对象。调用imageNamed:方法的时候先从这个字典中去取,如果取到就直接返回,如果娶不到再去文件中创建,然后保存在这个字典中。由于字典的key和value都是强引用,所以一旦创建后的图片永不销毁。
2的内部实现方式:+(instancetype)imageName:(NSString*)imageName {
if(!imageName)
return nil;
}
UIImage *image = self.imageBuff[imageName];
if(image){
return image;
}
NSString *path = @"image Path";
image = [UIImage imageNamed: ];
if(image){
self.imageBuff[imageName] = image;
}
return image;
}
+ (NSMutableDictionary*)imageBuff {
static NSMutableDictionary *_imageBuff;
static dispatch_once_t onceToken;
dispatch_once(onceToken,^{
_imageBuff = [[NSMutableDictionary alloc]init];
});
return _imageBuff;
}
2的使用场景:最主要的使用场景就是icon类的图片,一般的icon类的图片大小在3kb到20kb不等,都是一些小文件
2的优点:当一个icon在多个地方需要被显示的时候,其对应的UIImage对象只会被创建1次,而且多个地方的icon都将会共用一个UIImage对象,减少沙盒的读取操作。
assets是程序的图像资源。
自动适配各种分辨率的代码如下:
{
"images" : [
{
"orientation" : "portrait",
"idiom" : "iphone",
"extent" : "full-screen",
"minimum-system-version" : "7.0",
"filename" : "Default@2x.png",
"scale" : "2x"
},
{
"extent" : "full-screen",
"idiom" : "iphone",
"subtype" : "retina4",
"filename" : "Default-568h@2x.png",
"minimum-system-version" : "7.0",
"orientation" : "portrait",
"scale" : "2x"
},
{
"orientation" : "portrait",
"idiom" : "iphone",
"extent" : "full-screen",
"filename" : "Default.png",
"scale" : "1x"
},
{
"orientation" : "portrait",
"idiom" : "iphone",
"extent" : "full-screen",
"filename" : "Default@2x.png",
"scale" : "2x"
},
{
"orientation" : "portrait",
"idiom" : "iphone",
"extent" : "full-screen",
"filename" : "Default-568h@2x.png",
"subtype" : "retina4",
"scale" : "2x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
这个问题主要是因为老项目不是用Xcode9创建的,然后Xcode9出来之后我们升级到了Xcode9,但是打开项目Assets.xcassets,里面的AppIcon并没有"App Store iOS 1024pt"这个item,另外如果使用的是LaunchImage而不是LunchScreen作为启动图的话,LaunchImage里面也不会有"iPhone X Portrait iOS11+"这个item,所以我们就需要添加。
③更改Contents.json文件内容,按照对应格式添加即可:
AppIcon需要添加的内容:
LaunchImage需要添加的内容:
注意:
1filename这个字段的名字一定要跟你的图片资源的名字相匹配,是图片名字的全称包括后缀名,也包括@2x或者@3x。
2添加这段内容要注意前后的格式,如果你是添加在这个"images"这个数组的最后一个元素,那么与上一个元素之间就需要用","隔开;如果是中间添加那么就需要在前后都需要加","隔开,保持格式一致。
④把对应的图片资源拖到Contents.json文件同级目录下即可。然后刷新下AppIcon和LaunchImage就能看到对应的item了。
注意:
以上添加完之后还是要用Xcode9来打包,如果用Xcode8打包的话,会将原来指定的Icon或者LauchImage图片变成unsigned,所以还是要用Xcode9打包!
如果有任何其他问题,评论区里面留言,以上!!!
基本上每个IOS APP都会有新手引导页面这个功能,常规的就是几张静态图片,可以左右滚动。既然涉及到图片,就肯定会存在适配的问题(为了达到最优的体验效果,一般都会针对不同的分辨率设计不同尺寸的图片),本文主要就是讨论如何适配的问题。
2.1 方案一
根据屏幕分辨率的不同,使用不同的图片。
2.2 方案二
熟悉IOS开发的人都知道,每一个ios项目中,都有一个Assets.xcassets文件夹,用来管理项目中所有的图片(AppIcon、LaunchImage、其他业务图片)。
从上面的截图我们可以看到,xcode提供了两个内置的类型AppIcon、LaunchImage。我们只要提供正确尺寸的图片,ios系统就能在不同分辨率的设备上使用对应的图片而无需我们自己指定;另外就是我们自己创建的(avatar),提供2x、3x这两种类型的图片即可(1x的设备现在基本上找不到了,而且当前的ios系统也不支持1x的设备)。那么问题来了,我们自己创建的图片集合,只有3个类型(1x、2x、3x),并不能按照分辨率来设定。再看一下上面的截图,有一个“show”的图片集合,形式如下:
咦!这个鬼东西是怎么搞出来的?我们先看看Assets.xcassets文件夹在硬盘上的组织形式:
从上图我们可以看到,系统内置的两种类型AppIcon、LaunchImage对于的文件夹为AppIcon.appiconset、LaunchImage.launchimage,我们自己创建的图片集合avatar对应的文件夹为avatar.imageset。讲到这里,你应该大概猜到了show这个图片集合是怎么创建出来了吧?
1、先创建一个LaunchImage类型的图片集合;
2、修改名称(LaunchImage→show)
3、修改文件夹名称(show.launchimage→show.imageset)
回到正题,在show这个图片集合里面,我们就可以轻松的根据分辨率设置2x、3x类型的图片。
现在我们可以按照下图的方式使用新手引导图片了:
亲测:不同分辨率的设备,展示对应的图片。
我们注意到,show.imageset文件夹中有一个文件Contents.json,正是这个文件,ios系统才能根据设备类型展示对应的图片资源。Contents.json文件内容如下:
系统展示图片的时候,会先解析这个文件,然后根据设备的分辨率,找到对应的图片。
最近项目在做android和ios的项目,设计师让我给出图标的尺寸,于是查了一下尺寸。
第一步:产品经理和UI设计师制定好UI规范,然后开始做图标做颜色做尺寸等一系列和APP界面强相关的工作,以最常见的“back”按钮为例,UI设计师从无到有的具体实现步骤:
①在coreldraw或者Sketch中制作好“矢量图标“—返回,此时的长宽单位是毫米;
②保存输出为“PNG位图图片”—返回,此时的长宽单位是px(像素);
③指定好此图标的内外边距,此时的边距单位是px(像素);
④最终此图标图片交到开发者手中,做好图片的放置和内外边距的实现。开发这在这个过程中会遇到一个问题:内外边距是由px为单位的距离,但是在实际开发中“dp”做为单位的更加常见,所以就会涉及到“px”“dp”互转的封装类,专门用来实现这个过程,同时还要注意不同分辨率屏幕的适配。
(1)px,平常我们所说的手机的分辨率是1920×1080,这就是像素数量,也就是1920px×1080px,代表手机高度上有1920个像素点,宽度上有1080个像素点,每个像素点的单位是px。
(2)dp,dp是为了开发者便于做不同屏幕的适配而引入的开发单位,具体来说就是为了使得开发者设置的长度能够根据不同屏幕(分辨率/尺寸也就是dpi)获得不同的像素(px)数量。比如:我将一个控件设置长度为1dp,那么在160dpi上该控件长度为1px,在240dpi的屏幕上该控件的长度为1 240/160=1.5个px。也就是dp会随着不同屏幕而改变控件长度的像素数量。
(3)DPI,用户实际判别手机屏幕的显示好坏,除了分辨率还要考虑屏幕的宽高(英寸),也就是用dpi,即每英寸多少像素来评价屏幕的显示效果。(不然假如手机分辨率是1920×1080,但是屏幕是几十寸的,那显示效果将不会很好,甚至你有可能看到小的像素块,那将更影响视觉效果。)
三、Android开发中图标尺寸总结(务必掌握):
(1)dpi、分辨率与图标尺寸的关系L DPI ( 120 DPI )—分辨率240 320px,其启动图标大小为 36 x 36 pxM DPI (160 DPI )—分辨率320 480px,其启动图标大小为 48 x 48 pxH DPI ( 240 DPI )—分辨率480 800px,其启动图标大小为 72 x 72 pxXH DPI ( 320 DPI )—分辨率1280 720px,其启动图标大小为 96 x 96 pxXXH DPI( 480 DPI )—分辨率1920 1080px,其启动图标大小为144 x 144 pxXXXH DPI( 640 DPI )—分辨率3840*2160px,其启动图标大小为192 x 192 px
(2)开发中“px”到“dp”从 px 换算成 dp 要知道它是以什么 dpi 标准来设计的,换句话说,就是要根据不用分辨率的屏幕,根据换算关系表得到相应的 dp 。 例如: 以 xxhdpi 标准设计的 UI,其中一个切图的分辨率是 600 px * 360 px ,根据换算关系表可知,在 xxhdpi 标准下,1 dp = 3 px ,则其对应的 dp 是 200 dp * 120 dp 。换算关系表如下:(两次标红 请重点关注)
36 x 36 48 x 48 64 x 64 72 x 72 96 x 96 144 x 144 192 x 192
具体的图标尺寸可以打开xcode ,在项目目录下找到Assets.xcassets文件,这个文件里面标识出了所需要的图标尺寸,下面标识的是基本尺寸,2x就是底部尺寸x2 ,即下面的尺寸为80pt和120pt
看了一下新的苹果开发文档和Xcode给的AppIcon坑,发现又新增了一些尺寸的图标。在这里整理一下最新的最全的icon尺寸。
itunes中使用的icon
1024 * 1024
iPhone: iOS7-10桌面图标
60 * 60
120 * 120 @2x
180 * 180 @3x
iPhone: iOS5-6桌面App图标
57 * 57
114 * 114 @2x
iPad: iOS7-10桌面图标
76 * 76
152 * 152 @2x
iPad: iOS5-6桌面图标
72 * 72
144 * 144 @2x
iPhone: iOS5-6的搜索 iOS5-10的设置
iPad: iOS5-10的设置
29 * 29
58 * 58 @2x
87 * 87 @3x
iPad: iOS5-6系统搜索图标
50 * 50
100 * 100 @2x
iPhone、iPad: iOS7-10系统搜索图标
40 * 40
80 * 80 @2x
120 * 120 @3x
iPhone、iPad: iOS7-10通知栏图标
20 * 20
40 * 40 @2x
80 * 80 @3x
iPad Pro: App桌面图标
167 * 167 @2x
iPhone汇总:
1024 * 1024
120 * 120
180 * 180
20 * 20
40 * 40
80 * 80
29 * 29
58 * 58
87 * 87
57 * 57 (iOS5-6)
114 * 114 (iOS5-6)
iPad汇总:
1024 * 1024
76 * 76
152 * 152
20 * 20
40 * 40
80 * 80
120 * 120
29 * 29
58 * 58
72 * 72 (iOS5-6)
144 * 144 (iOS5-6)
50 * 50 (iOS5-6)
100 * 100 (iOS5-6)
167 * 167 (iPad Pro)
APP启动页,即LaunchImages,需要五张不同尺寸大小的图,切记一定要选择png格式,否则打包时报错,导致APP适配失败。
五张图的大小即:320 480、640 960、640 1136、750 1334、1242 2208 828 1792 1125 2436 1242 2688
分别对应的iphone屏幕尺寸:iphone 3GS、iphone4(s)、iphone5(c、s)、iphone6(s)、iphone 6(s) plus 、iphoneX(S)、iphoneXR、iphoneXs Max.
具体步骤:
第一步:
1.点击工程目录中的Images.xcassets,点击左侧边栏的LaunchImages(如果没有,在空白处右击创建一个)
2.然后在xcode最右侧的边栏处选择你的APP是否要对ipad、横竖屏、以及低版本的iOS系统做支持。
第二步:
将填好的图片配置到工程中的启动页选项中
点击项目目录的工程 - target - General - App Icons And Launch Images
将Launch Images Source的选项设置为LaunchImages,切记当APP不是用LaunchScreen.xib来配置启动页时,LaunchScreen File的选择状态一定为空!否则编译无法通过
如果此时还没有显示的话,那么你先删除app,然后再运行一下项目看看
参考网站: