每年6月份的蘋果開發者大會上,都會有一些新的技術被發布出來,這些新技術雖然初看比較高冷,但稍微一研讀就會發現,大多數都是那種make life easy
的很實用的技術,它要麼能讓我們寫更好的代碼,要麼能讓我們更好的寫代碼。總之,請不要害怕變化,大膽的去嘗試吧。
題外話到此,下面進入正題。
asset catalog
是蘋果在2014年也就是iOS7
系統上引入的用於APP內資源管理的輔助文件,我們可以把之前扔到bundle或者文件夾的圖片或者其他資源放入asset catalog
中,由它來幫我們管理資源,除了管理上的便利意外,它還能夠帶來另一個很大的實惠:他能幫助我們實現APP瘦身(APP Thinning
)。
目前主要通過兩種途徑來實現瘦身:
首先,使用asset catalog
能為不同的平台、不同設備甚至相同類型的設備但是不同的配置(比如內存大小等)提供定制化的資源供給的解決方案,提供不同資源,當用戶下載APP的時候,只有該用戶的設備需要的資源才會被下載下來,這樣就減小了用戶下載的包的大小:
對於游戲開發者而言,它還能提供對於資源的按需下載的功能(on demand resource
or app slicing
),通過對資源進行標記,能夠讓用戶在一開始下載APP的時候,可以下載一個尺寸較小的包,而隨著玩家打怪升級比如需要進入下一關,才下載下一關所需的資源。<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPjxpbWcgYWx0PQ=="這裡寫圖片描述" src="/uploadfile/Collfiles/20160501/20160501123151376.png" title="\" />
asset catalog
提供對圖片和通用類型數據(generic data
)的管理,對於通用資源的管理,這裡簡單提一下:你可以把你的APP需要使用的文本、二進制或者其他格式的文件拖進去,然後指定一下文件類型,就可以通過asset catalog來管理了。這裡我們主要討論的是它對圖片的管理能力。
可以通過Xcode
像其他文件一樣方便的創建和使用。如下圖:
通過打開文件夾我們可以看見asset catalog
的真面目:它實際上並不是一種新類型的文件,而是一個文件夾,而文件夾裡面存放的也都是常見的文件:子文件夾、我們放入管理的圖片和管理圖片真實名稱和使用名稱的映射。
打開一個json
文本文件,我們就看到了asset catalog
的核心了:它實際上就是用一個配置文件保存我們所有的關於這張圖片的信息:
關於asset catalog
的使用,自己動手去用一用立馬就明白了,下面僅羅列出一些小技巧:
1. 如何解決多個asset catalog
中的同名圖片資源的沖突問題:
首先j建議從根源上杜絕的話,可以對每個image set
使用模塊統一的前綴,雖然有些繁瑣,但對於資源的規范、後期的維護是一勞永逸的。
另外一個方法就是在asset catalog
中使用命名空間namespace
:如下圖
然後在使用圖片的時候需要帶上命名空間前綴:
imageView.image = [UIImage imageNamed:@"folder1/Image"];
如何對asset catalog
管理的圖片進行未使用圖片過濾。因為asset catalog
都是簡單的文件夾+配置文件的方式,因此可以編寫腳本完成這種過濾。比如這裡提供了一些腳本
#!/bin/bash
for i in `find . -name "*.imageset"`; do
file=`basename -s .imageset "$i"`
result=`ack -i "$file" --ignore-dir="*.xcassets"`
if [ -z "$result" ]; then
echo "$i"
fi
done
利用asset catalog
存儲圖片直接給某張圖片設置可拉伸區域,這樣你在代碼裡使用這張圖片的時候就不用手動設置(具體怎麼使用):
如下這段代碼就可以省略了:
UIImage *originalImage = [UIImage new]; UIImage *stretchImage = [originalImage resizableImageWithCapInsets:UIEdgeInsetsMake(0.1, 0.1, 0.1, 0.1) resizingMode:UIImageResizingModeStretch];
利用asset catalog
你可以給不同設配、不同配置、甚至不同屏幕狀態的機型匹配不同的圖片:
示例1. 為不同機型添加不同的配置圖片
示例2. 為iPhone機型的1GB和2GB內存版本添加不同的圖片
實例3. 為不同屏幕寬度的設備配置不同的圖片(需要autolayout + sizeclass的支持)
5. 利用asset catalog
可以將圖片直接配置成model image
,然後添加上不同的渲染顏色: