2012年5月3日 星期四

忘了@2x的猶抱琵琶半遮面

iOS的retina提供了令人驚豔的超高解析度,讓iPhone從320*480變身為640*960, iPad從1024 * 768 變身為 2048 * 1536。然而,更令身為程式設計師的我們開心的,原來的程式碼我們一行也不用改,只要將高解析度的圖片檔名加上@2x,系統即能聰明地區分不同解析度的圖片。


比方以上這張百吻巴黎楊雅晴 kiss圖片,我們只要分別將低解析度的kiss.jpg和高解度的kiss@2x.jpg加入專案,當以[UIImage imageNamed:@"kiss.jpg"]建立image物件時,若iPhone本身具有retina螢幕,系統即會聰明地採用@2x結尾的圖片。


不過若是我們將高解度的圖片加入專案,但卻忘了於檔名裡加上@2x,將讓系統產生嚴重的誤解。


如上圖所示,圖片裡的帥哥美女都只露出了半張臉,仿佛古時候的猶抱琵琶半遮面。
造成圖片無法完整顯示其實真的不太容易,需要同時滿足以下三點:
1.將UIImageView物件的contentMode設為UIViewContentModeTop
2.高解析度的圖片檔名忘了補上@2x
3.具有retina能力的螢幕

這是因為當有加上@2x時,若圖片原來是200 * 200 (pixel),系統會將它除以2,設定圖片的大小為100*100 (point)。但若我們不幸忘了加上@2x,系統將不幸地把圖片的大小設為200 * 200 (point),而在retina螢幕上,200 * 200 (point) 等同於 400 * 400 (pixel),所以圖片被放大,幸福的kiss也就只露出了一半。

另外有一點值得注意的,如果利用initWithContentsOfFile建立UIImage物件,此時傳入的path可以為沒有@2x的圖檔路徑,當螢幕為retina時,系統同樣會聰明地找尋@2x的檔案 。但若只有@2x的檔案,但卻沒有低解析度的普通檔案,此時利用NSBundle的pathForResource取得的路徑將是空的,造成找不到檔案,無法建立UIImage物件。






沒有留言:

張貼留言