Assets.xcassets不同壓縮設(shè)置下的assets.car文件對比
創(chuàng)新互聯(lián)公司成都網(wǎng)站建設(shè)按需制作,是成都營銷推廣公司,為成都宴會酒店設(shè)計(jì)提供網(wǎng)站建設(shè)服務(wù),有成熟的網(wǎng)站定制合作流程,提供網(wǎng)站定制設(shè)計(jì)服務(wù):原型圖制作、網(wǎng)站創(chuàng)意設(shè)計(jì)、前端HTML5制作、后臺程序開發(fā)等。成都網(wǎng)站營銷推廣熱線:13518219792
assets.car文件查看
actool打包xcassets為Assets.car命令
圖片的加載方式 iOS 目前有2種:
1.Resource 它是指inageWithContentsFile:創(chuàng)建圖片的圖片管理方式;
2.ImageAssets 它是指使用imageNamed:創(chuàng)建圖片的圖片的管理方式;
UIImage內(nèi)存處理:
真是的App開發(fā)中,常用的無非是1和2兩種方式
1的優(yōu)缺點(diǎn):
1的使用方式:NSString *path =[[NSBundle mainBundle]pathForResource:@"image@2x" type:@"png"];
UIImage *image = [UIImage imageWithContentsOfFile:path];
1的內(nèi)部實(shí)現(xiàn)方式:+ (instancetype)imageWithContentsOfFile:(NSString *)fileName {
NSUInteger scale = 0;
{
scale = 2;//這一部分是提取fileName中@號后面的那個數(shù)字,如果存在則為1
}
return [[self alloc] initWithData:[NSData dataWithContentsOfFile:fileName scale:scale]];
}
這種方式使用的時候會有個局限性,這個圖片必須是在.ipa的根目錄或者沙盒中。根目錄就是把圖片文件拖到工程中,沙盒中的圖片是寫入進(jìn)去或者存進(jìn)去的;
1的特性:在1的圖片管理方式中,所有的圖片創(chuàng)建都是通過讀取文件數(shù)據(jù)得到的,讀取一次文件數(shù)據(jù)就會產(chǎn)生一次NSData以及產(chǎn)生一個UIImage,當(dāng)圖片創(chuàng)建好后會銷毀對應(yīng)的NSData,當(dāng)UIImage的引用計(jì)數(shù)變?yōu)?的時候自動銷毀UIImage,這樣的話就可以保證圖片不會長期存在內(nèi)存中。
1的使用場景:由于這種方法的特性,所以1得方法一般用在圖片數(shù)據(jù)很大,圖片一般不需要多次使用的情況,比如引導(dǎo)頁面的背景(圖片全屏),有時候運(yùn)行APP才顯示,有時候根本就用不到。
1的優(yōu)點(diǎn):圖片的生命周期可以得到管理,當(dāng)需要圖片的時候就創(chuàng)建一個,當(dāng)不需要圖片的時候就讓他銷毀,圖片不會長期的保存在內(nèi)存中,因此不會有內(nèi)存浪費(fèi),在減少大圖的內(nèi)存占用中,1方式優(yōu)先。
2的方式:2的設(shè)計(jì)初衷主要是為了解決自動適配Retian屏和非Retian屏,也就是說為了解決iPhone4和iPhone3GS以及以前的機(jī)型的屏幕適配,雖然沒有3GS了,但是plus出來了,需要3x
2的使用方式:UIImage *image = [UIImage imageName:@"image"];
2的特性:與1相似,2也是從圖片文件中讀取圖片數(shù)據(jù)轉(zhuǎn)化成UIImage,只不過這些圖片都打包在2中,最大的區(qū)別就是圖片有緩存。相當(dāng)于與一個字典,key是圖片名,value是圖片對象。調(diào)用imageNamed:方法的時候先從這個字典中去取,如果取到就直接返回,如果娶不到再去文件中創(chuàng)建,然后保存在這個字典中。由于字典的key和value都是強(qiáng)引用,所以一旦創(chuàng)建后的圖片永不銷毀。
2的內(nèi)部實(shí)現(xiàn)方式:+(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的優(yōu)點(diǎn):當(dāng)一個icon在多個地方需要被顯示的時候,其對應(yīng)的UIImage對象只會被創(chuàng)建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"
}
}
這個問題主要是因?yàn)槔享?xiàng)目不是用Xcode9創(chuàng)建的,然后Xcode9出來之后我們升級到了Xcode9,但是打開項(xiàng)目Assets.xcassets,里面的AppIcon并沒有"App Store iOS 1024pt"這個item,另外如果使用的是LaunchImage而不是LunchScreen作為啟動圖的話,LaunchImage里面也不會有"iPhone X Portrait iOS11+"這個item,所以我們就需要添加。
③更改Contents.json文件內(nèi)容,按照對應(yīng)格式添加即可:
AppIcon需要添加的內(nèi)容:
LaunchImage需要添加的內(nèi)容:
注意:
1filename這個字段的名字一定要跟你的圖片資源的名字相匹配,是圖片名字的全稱包括后綴名,也包括@2x或者@3x。
2添加這段內(nèi)容要注意前后的格式,如果你是添加在這個"images"這個數(shù)組的最后一個元素,那么與上一個元素之間就需要用","隔開;如果是中間添加那么就需要在前后都需要加","隔開,保持格式一致。
④把對應(yīng)的圖片資源拖到Contents.json文件同級目錄下即可。然后刷新下AppIcon和LaunchImage就能看到對應(yīng)的item了。
注意:
以上添加完之后還是要用Xcode9來打包,如果用Xcode8打包的話,會將原來指定的Icon或者LauchImage圖片變成unsigned,所以還是要用Xcode9打包!
如果有任何其他問題,評論區(qū)里面留言,以上?。。?/p>
基本上每個IOS APP都會有新手引導(dǎo)頁面這個功能,常規(guī)的就是幾張靜態(tài)圖片,可以左右滾動。既然涉及到圖片,就肯定會存在適配的問題(為了達(dá)到最優(yōu)的體驗(yàn)效果,一般都會針對不同的分辨率設(shè)計(jì)不同尺寸的圖片),本文主要就是討論如何適配的問題。
2.1 方案一
根據(jù)屏幕分辨率的不同,使用不同的圖片。
2.2 ?方案二
熟悉IOS開發(fā)的人都知道,每一個ios項(xiàng)目中,都有一個Assets.xcassets文件夾,用來管理項(xiàng)目中所有的圖片(AppIcon、LaunchImage、其他業(yè)務(wù)圖片)。
從上面的截圖我們可以看到,xcode提供了兩個內(nèi)置的類型AppIcon、LaunchImage。我們只要提供正確尺寸的圖片,ios系統(tǒng)就能在不同分辨率的設(shè)備上使用對應(yīng)的圖片而無需我們自己指定;另外就是我們自己創(chuàng)建的(avatar),提供2x、3x這兩種類型的圖片即可(1x的設(shè)備現(xiàn)在基本上找不到了,而且當(dāng)前的ios系統(tǒng)也不支持1x的設(shè)備)。那么問題來了,我們自己創(chuàng)建的圖片集合,只有3個類型(1x、2x、3x),并不能按照分辨率來設(shè)定。再看一下上面的截圖,有一個“show”的圖片集合,形式如下:
咦!這個鬼東西是怎么搞出來的?我們先看看Assets.xcassets文件夾在硬盤上的組織形式:
從上圖我們可以看到,系統(tǒng)內(nèi)置的兩種類型AppIcon、LaunchImage對于的文件夾為AppIcon.appiconset、LaunchImage.launchimage,我們自己創(chuàng)建的圖片集合avatar對應(yīng)的文件夾為avatar.imageset。講到這里,你應(yīng)該大概猜到了show這個圖片集合是怎么創(chuàng)建出來了吧?
1、先創(chuàng)建一個LaunchImage類型的圖片集合;
2、修改名稱(LaunchImage→show)
3、修改文件夾名稱(show.launchimage→show.imageset)
回到正題,在show這個圖片集合里面,我們就可以輕松的根據(jù)分辨率設(shè)置2x、3x類型的圖片。
現(xiàn)在我們可以按照下圖的方式使用新手引導(dǎo)圖片了:
親測:不同分辨率的設(shè)備,展示對應(yīng)的圖片。
我們注意到,show.imageset文件夾中有一個文件Contents.json,正是這個文件,ios系統(tǒng)才能根據(jù)設(shè)備類型展示對應(yīng)的圖片資源。Contents.json文件內(nèi)容如下:
系統(tǒng)展示圖片的時候,會先解析這個文件,然后根據(jù)設(shè)備的分辨率,找到對應(yīng)的圖片。
最近項(xiàng)目在做android和ios的項(xiàng)目,設(shè)計(jì)師讓我給出圖標(biāo)的尺寸,于是查了一下尺寸。
第一步:產(chǎn)品經(jīng)理和UI設(shè)計(jì)師制定好UI規(guī)范,然后開始做圖標(biāo)做顏色做尺寸等一系列和APP界面強(qiáng)相關(guān)的工作,以最常見的“back”按鈕為例,UI設(shè)計(jì)師從無到有的具體實(shí)現(xiàn)步驟:
①在coreldraw或者Sketch中制作好“矢量圖標(biāo)“—返回,此時的長寬單位是毫米;
②保存輸出為“PNG位圖圖片”—返回,此時的長寬單位是px(像素);
③指定好此圖標(biāo)的內(nèi)外邊距,此時的邊距單位是px(像素);
④最終此圖標(biāo)圖片交到開發(fā)者手中,做好圖片的放置和內(nèi)外邊距的實(shí)現(xiàn)。開發(fā)這在這個過程中會遇到一個問題:內(nèi)外邊距是由px為單位的距離,但是在實(shí)際開發(fā)中“dp”做為單位的更加常見,所以就會涉及到“px”“dp”互轉(zhuǎn)的封裝類,專門用來實(shí)現(xiàn)這個過程,同時還要注意不同分辨率屏幕的適配。
(1)px,平常我們所說的手機(jī)的分辨率是1920×1080,這就是像素數(shù)量,也就是1920px×1080px,代表手機(jī)高度上有1920個像素點(diǎn),寬度上有1080個像素點(diǎn),每個像素點(diǎn)的單位是px。
(2)dp,dp是為了開發(fā)者便于做不同屏幕的適配而引入的開發(fā)單位,具體來說就是為了使得開發(fā)者設(shè)置的長度能夠根據(jù)不同屏幕(分辨率/尺寸也就是dpi)獲得不同的像素(px)數(shù)量。比如:我將一個控件設(shè)置長度為1dp,那么在160dpi上該控件長度為1px,在240dpi的屏幕上該控件的長度為1 240/160=1.5個px。也就是dp會隨著不同屏幕而改變控件長度的像素數(shù)量。
(3)DPI,用戶實(shí)際判別手機(jī)屏幕的顯示好壞,除了分辨率還要考慮屏幕的寬高(英寸),也就是用dpi,即每英寸多少像素來評價屏幕的顯示效果。(不然假如手機(jī)分辨率是1920×1080,但是屏幕是幾十寸的,那顯示效果將不會很好,甚至你有可能看到小的像素塊,那將更影響視覺效果。)
三、Android開發(fā)中圖標(biāo)尺寸總結(jié)(務(wù)必掌握):
(1)dpi、分辨率與圖標(biāo)尺寸的關(guān)系L DPI ( 120 DPI )—分辨率240 320px,其啟動圖標(biāo)大小為 36 x 36 pxM DPI (160 DPI )—分辨率320 480px,其啟動圖標(biāo)大小為 48 x 48 pxH DPI ( 240 DPI )—分辨率480 800px,其啟動圖標(biāo)大小為 72 x 72 pxXH DPI ( 320 DPI )—分辨率1280 720px,其啟動圖標(biāo)大小為 96 x 96 pxXXH DPI( 480 DPI )—分辨率1920 1080px,其啟動圖標(biāo)大小為144 x 144 pxXXXH DPI( 640 DPI )—分辨率3840*2160px,其啟動圖標(biāo)大小為192 x 192 px
(2)開發(fā)中“px”到“dp”從 px 換算成 dp 要知道它是以什么 dpi 標(biāo)準(zhǔn)來設(shè)計(jì)的,換句話說,就是要根據(jù)不用分辨率的屏幕,根據(jù)換算關(guān)系表得到相應(yīng)的 dp 。 例如: 以 xxhdpi 標(biāo)準(zhǔn)設(shè)計(jì)的 UI,其中一個切圖的分辨率是 600 px * 360 px ,根據(jù)換算關(guān)系表可知,在 xxhdpi 標(biāo)準(zhǔn)下,1 dp = 3 px ,則其對應(yīng)的 dp 是 200 dp * 120 dp 。換算關(guān)系表如下:(兩次標(biāo)紅 請重點(diǎn)關(guān)注)
36 x 36 48 x 48 64 x 64 72 x 72 96 x 96 144 x 144 192 x 192
具體的圖標(biāo)尺寸可以打開xcode ,在項(xiàng)目目錄下找到Assets.xcassets文件,這個文件里面標(biāo)識出了所需要的圖標(biāo)尺寸,下面標(biāo)識的是基本尺寸,2x就是底部尺寸x2 ,即下面的尺寸為80pt和120pt
看了一下新的蘋果開發(fā)文檔和Xcode給的AppIcon坑,發(fā)現(xiàn)又新增了一些尺寸的圖標(biāo)。在這里整理一下最新的最全的icon尺寸。
itunes中使用的icon
1024 * 1024
iPhone: iOS7-10桌面圖標(biāo)
60 * 60
120 * 120 @2x
180 * 180 @3x
iPhone: iOS5-6桌面App圖標(biāo)
57 * 57
114 * 114 @2x
iPad: iOS7-10桌面圖標(biāo)
76 * 76
152 * 152 @2x
iPad: iOS5-6桌面圖標(biāo)
72 * 72
144 * 144 @2x
iPhone: iOS5-6的搜索 iOS5-10的設(shè)置
iPad: iOS5-10的設(shè)置
29 * 29
58 * 58 @2x
87 * 87 @3x
iPad: iOS5-6系統(tǒng)搜索圖標(biāo)
50 * 50
100 * 100 @2x
iPhone、iPad: iOS7-10系統(tǒng)搜索圖標(biāo)
40 * 40
80 * 80 @2x
120 * 120 @3x
iPhone、iPad: iOS7-10通知欄圖標(biāo)
20 * 20
40 * 40 @2x
80 * 80 @3x
iPad Pro: App桌面圖標(biāo)
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格式,否則打包時報錯,導(dǎo)致APP適配失敗。
五張圖的大小即:320 480、640 960、640 1136、750 1334、1242 2208 828 1792 1125 2436 1242 2688
分別對應(yīng)的iphone屏幕尺寸:iphone 3GS、iphone4(s)、iphone5(c、s)、iphone6(s)、iphone 6(s) plus 、iphoneX(S)、iphoneXR、iphoneXs Max.
具體步驟:
第一步:
1.點(diǎn)擊工程目錄中的Images.xcassets,點(diǎn)擊左側(cè)邊欄的LaunchImages(如果沒有,在空白處右擊創(chuàng)建一個)
2.然后在xcode最右側(cè)的邊欄處選擇你的APP是否要對ipad、橫豎屏、以及低版本的iOS系統(tǒng)做支持。
第二步:
將填好的圖片配置到工程中的啟動頁選項(xiàng)中
點(diǎn)擊項(xiàng)目目錄的工程 - target - General - App Icons And Launch Images
將Launch Images Source的選項(xiàng)設(shè)置為LaunchImages,切記當(dāng)APP不是用LaunchScreen.xib來配置啟動頁時,LaunchScreen File的選擇狀態(tài)一定為空!否則編譯無法通過
如果此時還沒有顯示的話,那么你先刪除app,然后再運(yùn)行一下項(xiàng)目看看
參考網(wǎng)站: