標籤:
使用asset catalog管理圖片資源
每年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的時候,可以下載一個尺寸較小的包,而隨著玩家打怪升級比如需要進入下一關,才下載下一關所需的資源。
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/bashfor i in `find . -name "*.imageset"`; do file=`basename -s .imageset "$i"` result=`ack -i "$file" --ignore-dir="*.xcassets"` if [ -z "$result" ]; then echo "$i" fidone
- 利用
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,然後添加上不同的渲染顏色:
使用asset catalog管理圖片資源