2012-02-20 47 views
3

對於測試不/視網膜顯示我創建了一個大小爲100x100的UIView。iOS視網膜顯示:圖像雙倍大小

我已經創建2張圖片: - 正常大小(100×100) - 視網膜尺寸(200×200)

我有兩種情況: 1)在背景非視網膜顯示+正常尺寸圖像 2)視網膜顯示+背景中的視網膜大小圖像

第一種情況是好的。 在第二種情況下圖像是雙倍大小,在我的UIView中,我只能看到整個圖像的1/4。

if (IS_RETINA()) { 
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:IMG_NAVIGATION_BAR_BACKGROUND_RETINA] forBarMetrics:UIBarMetricsDefault]; 
} 
else { 
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:IMG_NAVIGATION_BAR_BACKGROUND] forBarMetrics:UIBarMetricsDefault]; 
} 

回答

36

有做到這一點更簡單的方法:

同樣的,當我嘗試將背景圖片分配給我的UIViewController導航欄如下情況發生。給予圖像的視網膜版本與非視網膜版本相同的名稱,除了最後的「@ 2x」。例如,如果您的常規圖像被命名爲foo.png,那麼視網膜版應該被命名爲[email protected]

然後,請隨時參考文件名的常規版本(例如,foo.png)。當您的應用在非視網膜硬件上運行時,將使用常規圖像,但是無論何時使用視網膜硬件,自動使用更高分辨率的圖像。這比爲所用的每個圖像編寫一條if語句更容易,再加上它實際上會起作用。

+1

您犯了一個錯字[email protected]。 – coverback 2012-02-20 20:49:48

+0

很好,謝謝。 – yuji 2012-02-20 20:53:48

+1

爲了說明問題,OP的問題在於他的「視網膜」圖像仍然是以「1」的比例創建的,所以它會變得模糊,只能顯示左上象限。 – 2012-02-20 20:56:36

2

您不需要編寫IS_RETINA測試代碼,只需在包含要用於視網膜顯示的圖像的文件名稱中添加@ 2x後綴,iOS就會自動優先使用該後綴。

包2圖像文件,prettyNavBarBackground.png和[email protected]

#define IMG_NAVIGATION_BAR_BACKGROUND prettyNavBarBackground 

然後,你可以使用這個單呼,和iOS將選擇相應的選項

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:IMG_NAVIGATION_BAR_BACKGROUND] forBarMetrics:UIBarMetricsDefault]; 
+0

@ 2x自動操作還可以與代碼一起使用還是僅在使用IB分配圖像時使用代碼? – Bagbyte 2012-02-20 21:02:01

+0

@ user915829:使用代碼 - 只需嘗試一下。你必須在你的項目中包含foo.png和[email protected]的所有變體。但是在代碼中你只能引用foo.png - 其他所有事情都會自動發生。 – 2012-02-20 21:07:25

+0

是的,代碼或IB - 對於每個圖像,iOS將使用它可以找到的最好的。 – Snips 2012-02-20 21:13:57

0

吳唐不必編寫任何代碼來區分視網膜和普通硬件。你只需要添加一個「@ 2x」圖像。這會很好地工作。

你不必單獨調用這些圖像,而只需要編寫文件名即可。