ios 7 Launch Images改變屏幕尺寸

前幾天移動了一下Launch Images的文件位置,導致了在iPhone5上用

[[UIScreen mainScreen] bounds]

獲取屏幕尺寸時,得到的結果是320*480,而不是屏幕實際的尺寸320*568,經過一番研究之後發現,Launch Image的大小可能導致用這種方法獲得的屏幕尺寸不準確。

給App添加Launch Image時,需要先把圖片加到工程中,在Project Navigator裏的工程文件上右鍵->Add Files to “XXX”,選擇要添加的圖片即可,添加的圖片會出現在工程文件下面和工程文件裏的Build Phases->Copy Bundle Resources(後文簡稱Resources)列表裏,圖片文件必須在Resources的頂層目錄裏,不然可能找不到(原文鏈接),圖片必須是非交錯的PNG格式(原文鏈接)。

如果Launch Image的文件名是默認文件名”Default”的話,Target的設置可以自動識別出來

可以在didFinishLaunchingWithOptions裏打印出Screen的尺寸

此時,如果運行在3.5英寸的設備上,將會顯示640*960的Launch Image,打印屏幕尺寸爲320,480,如果運行在4英寸的設備上,將會顯示640*1136的Launch Image,打印出320,568。

創建使用默認名稱的Launch Image,需要把文件名命名爲[email protected][email protected],尺寸必須爲640*960和640*1136,必須加到Build Phases的Resources裏,三條缺一不可,Launch Image纔會自動對應到Target的設置裏,否則可能無法正常顯示。

根據官方文檔(原文鏈接),系統會尋找包含”-568h”的Launch Image,如果找到了,系統會認爲該App支持4英寸屏幕的設備,於是讓App在全屏模式下運行,如果找不到,App在4英寸的設備上運行時,系統會在屏幕上下加上黑條,App會在640*960的模式下運行,即便是4英寸的設備,打印出的屏幕尺寸還是320*480。

此時如果Resources裏沒有添加帶”-568h”的Launch Image,就會導致這個問題。當把Resource裏的資源刪除時,雖然資源仍然還在Project Navigator裏,但該資源是不會被拷貝到生成的安裝包的,因此仍然會導致這個問題。

XCode會對設置的Launch Image圖片的實際尺寸進行檢查,如果實際文件的尺寸不是640*960或640*1136的話,在Targets設置裏會提示”No image with correct dimensions found”,運行時會把圖片拉伸到對應的尺寸。

總結一下所有現象,在4英寸設備上,如果有”-568h”的Launch Image,會全屏顯示,打印屏幕尺寸爲320*568,如果只有640*960的Launch Image,屏幕上下會出現黑邊,打印屏幕尺寸爲320,480,沒有合法Launch Image時,啓動畫面是黑色,在3.5英寸設備上,”-568h”的Launch Image並不會被”壓扁”顯示,所以不用考慮,如果有640*960的Launch Image,會全屏顯示,打印屏幕尺寸爲320,480,否則啓動畫面是黑色。

如果想自定義LaunchImage的名稱的話,可以通過Target設置來制定,點擊Launch Images選項裏的文件夾圖標,可以選擇已經添加到工程的圖片,如果圖片沒有添加到工程,可以選”Add Other”,之後切記要把圖片加到Resources裏。選擇的圖片名稱所表示的尺寸必須和選項裏的Dimensions對應,不然可能仍然顯示”No image specified”。

添加完自定義的Launch Image之後,XXX-Info.plist文件裏會多出一項”UILaunchImages”,值類型爲數組,如果之前沒有按照要求選擇圖片的話,選擇的歷史記錄也會堆積在數組裏,可以在此去掉不需要的Item。

Item裏的UILaunchImageName表示該Item對應的圖片名稱,UILaunchImageSize表示該Item指定的圖片對應到哪個尺寸的屏幕上,而不是圖片本身的尺寸,目前只有兩種尺寸:”320,480″和”320,568″,如果強制改成其他尺寸,會被系統識別爲”320,480″,不管能不能找到圖片文件,都顯示黑屏。

在4英寸的設備上,系統會優先選擇”320,568″尺寸的Item,根據指定的文件名查找”-568h@2x”的圖片,如果找不到,會顯示黑屏,如果有一張”@2x”的圖片,且分辨率是640*960,或者該圖片被故意命名成”-568h@2x”,圖片會被拉長顯示,如有有張640*1136的圖片,被故意命名成”@2x”,圖片仍然會全屏顯示,如果兩種故意弄錯命名的圖片同時存在,系統選擇了640*960的圖片並拉長顯示,打印出的屏幕尺寸都是”320,568″。

如果沒有”320,568″尺寸的Item,系統會默認爲是”320*480″,並尋找”@2x”的圖片,如果找不到,會顯示黑屏,如果有一張”-568h@2x”,且分辨率是640*1136的圖片,或該圖片被故意命名成”@2x”,仍然會全屏顯示出來,如果有一張640*960的圖片,被故意命名成”-568h@2x”,圖片上下會有黑邊,如果兩種故意弄錯命名的圖片同時存在,系統選擇了640*960的圖片顯示,上下會有黑邊,無法判斷系統是根據什麼優先級選擇的,打印出的屏幕尺寸都是”320,480″,App運行起來後屏幕上下仍然會有黑邊。

在3.5英寸的設備上,Item只有”320,480″一種尺寸選擇,系統會查找”@2x”的圖片,如果找不到,會顯示黑屏,如果有一張分辨率爲640*1136的圖片,且故意命名成”@2x”,圖片會被壓扁顯示,如果有一張分辨率爲640*960的圖片,且故意命名成”-568h@2x”,會顯示黑屏,如果兩種故意弄錯命名的圖片同時存在,系統選擇了640*1136的圖片顯示,而且被壓扁了,無法理解系統爲何這樣選擇,打印出的屏幕尺寸都是”320,480″。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章