2012-12-25 155 views
1

我知道以前也有過類似的問題,但我真的處於一個糟糕的境地。支持iPhone 3G,iPhone 4和iPhone 5的圖像分辨率

我建立這是想在iPhone 3GiPhone 4iPhone 5工作的應用程序。

我是iOS開發人員的初學者,到現在爲止,我已經寫了大量的UI代碼,這些代碼只適用於iPhone模擬器。我專注於通用語言和SDK功能,以便了解iOS的一般開發,因此大多忽略了模擬器向我提供的任何解析支持。

現在,我正面臨這些不同iPhone版本之間的可移植性要求,我非常困惑。首先,讓我告訴你們,我知道有關iPhone 3和iPhone 4的屏幕支持的詳細信息,並請糾正我,如果我(現在無視iPhone 5完全爲)做錯了什麼:

  1. 系統假定一個320x480 POINT根據查看區域。在iPhone 3中,實際的屏幕尺寸是相同的,但iPhone 4使用實際的尺寸爲640×960像素的屏幕。

  2. 我們根據320x480大小編碼並生成我們的視圖。我們提供正常分辨率的圖像(例如100x100大小的some_image.png)和高分辨率版本以及「@ 2x」後綴。 (200x200 -sized [email protected])都在同一個應用程序包中。

  3. 當調用UIKit圖像裝載方法,例如UIImageUIImageView系統的那些選擇我們的圖像並加載它們的正確版本,根據該電流裝置(iPhone 3或iPhone 4)。

到現在爲止,我還是持謹慎態度,提供以支持低分辨率和高分辨率iPhone 3GiPhone 4這三個步驟。

比方說,我有一個100x100的圖像,我將在UIImage對象中使用它。我還提供了200x200高分辨率版本,我認爲這可以在iPhone 4和iPhone 5上使用「@ 2x」後綴。

但是,讓我們說,我有大小小320x480覆蓋整個背景的背景圖像和我公司提供的640×960版本與「@ 2倍」後綴爲好。

但是iPhone5屏幕會發生什麼事,尺寸爲640x1136?我應該準備一個iPhone5分辨率圖像並將其加載到if(IPHONE5 == true)條件?

處理這個問題的正確方法是什麼?

回答

2

幾個問題需要處理:

  1. 「整個畫面」的即意
  2. 圖像是屏幕寬高比與屏幕的寬高比/背景圖片/其它圖片獨立

在#1的情況下,您需要提供具有不同分辨率的相同/相似圖像。一個適用於320x480像素設備,一個適用於視網膜顯示屏(640x960像素),@ 2x,第三個適合iPhone 5顯示屏(如果它是通用應用程序,可能還需要單獨的iPad圖像)。

不幸的是,iOS不提供任何類似於iPhone 5顯示器的@ 2x命名。一個常見的慣例似乎在文件名中包含@ 568h,但不會自動被iOS使用。解決方案是確定顯示器是否是iPhone以及顯示器是否更高。下面的代碼片段可以讓你做到這一點:

// Is it an iPhone with the tall screen? 
if ([[ UIScreen mainScreen ] bounds ].size.height == 568.)) 

    // use the tall image 
    image = [UIImage imageNamed:@"[email protected]" 

else { 

    // use 'default' image (will use [email protected] if iPhone retina, 
    // myImage~ipad.png if iPad, [email protected] if iPad retina) 
    image = [UIImage imageNamed:@"myImage.png" 
} 

#2,因爲你可能想在100像素X 100像素,顯示爲所有設備上的廣場,你都OK只提供了100像素X 100像素和200像素x 200像素,後者在文件名中包含@ 2x。

+0

感謝您的回答。看來我們需要存儲3個不同版本的縱橫比相關圖像。如果我們的應用使用具有不同背景的許多不同視圖,這是否會造成內存負載? –

+0

應用程序包/ apk文件將更大(並且是更大的下載),需要更多的設備存儲空間。在運行時,它只會將其中一個圖像加載到內存中。如果通過「具有不同背景的不同視圖」,只有可見視圖需要將其背景圖像加載到內存中,並且iOS通常會在資源不足時卸載它不需要的圖像。 – bobnoble