2011-04-01 100 views
25

當我們需要從某個網址下載圖像並在兩種設備上顯示時 - Retina(具有2x圖像)和普通設備 - 我們是否應該有兩個不同的圖像處理這個URL?下載正常圖像與視網膜設備圖像(2x)

對於資源包中的圖片,我們保留xyz.png和[email protected]並且它的工作正常。

對於我們從服務器獲取的圖像,我們是否需要爲這兩種圖像分別創建圖像URL並使用相同的命名約定(xyz.png和[email protected])在本地緩存它們?

請在這裏扔一些光。

回答

24

您可以檢查設備是否具有高分辨率視網膜顯示,並根據該圖像下載不同的圖像。不要爲照片和東西而煩惱,因爲無論如何您都可以根據界面大小進行縮放。
您可以

UIImage *image = //download... 
image=[UIImage imageWithCGImage:[image CGImage] scale:2.0 orientation:UIImageOrientationUp]; 

創建下載圖像的縮放版本請記住,縮放100x100的圖像將變爲50×50點圖像(2.0級)。

首先檢查,如果你有一個視網膜顯示這裏

BOOL retina = NO; 
if([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) 
    retina = [[UIScreen mainScreen] scale] == 2.0 ? YES : NO; 
+0

一個問題。如果我們需要將這個圖像緩存在文件系統中,那麼我們應該用[email protected]格式保存它嗎?所以當我們從文件系統中檢索它時,IOS可以識別它。 – Abhinav 2011-04-01 22:10:19

+2

@Abhinav @ 2x魔術只適用於[[UIImage imageNamed:@「foo」];'此方法只適用於保存到包中的圖像。並且該包不可寫,您不能將圖像保存在那裏。所以你沒有這方面的優勢。但用戶可能會在舊設備上使用您的軟件,iTunes會保存所有內容,然後他購買帶有視網膜顯示屏的設備,並使用所有圖像數據恢復備份。他會在視網膜設備上使用正常的圖像。所以我建議使用@ 2x擴展,但是你必須手動管理它。 – 2011-04-01 22:17:15

+0

好的。因此,根據是否是視網膜設備,我們仍然需要區分文件名,以便稍後用該名稱讀取它們,因爲IOS不會處理這個問題。 – Abhinav 2011-04-01 22:30:10

0
CGFloat screenScale = [UIScreen mainScreen]. 
UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:myUrl] scale:screenScale];