簡體   English   中英

從網絡服務器下載圖像用於視網膜顯示器iOS

[英]Downloading images from a web server for the retina display iOS

我正在使用以下代碼從網絡服務器下載圖像,以便在iOS應用程序的表格視圖中顯示:

NSURL *url = [NSURL URLWithString:[imageArray objectAtIndex:indexPath.row]];
UIImage *myImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];
cell.imageView.image = myImage;

圖像視圖是60x60占位符,120x120用於視網膜顯示。 我將假設用戶有一個iPhone 4.但是,如果我將圖像大小調整為120x120它不能解決問題,它對於imageview來說太大了。 如果我將圖像大小設置為60x60,在網絡服務器上,則圖像適合但有點模糊。 有誰知道如何解決這個問題?

謝謝!

讓我們首先同意您的UIImageView是60x60 ,標准顯示器為60x60 像素 ,視網膜顯示器為120x120 像素

對於一個UIImageView在60×60點時,圖像應該在尺度1.0 60×60像素為一個標准的顯示,並在規模2.0 120×120像素視網膜顯示。 這意味着您的UIImage應始終具有60x60點的size ,但根據顯示分辨率應具有不同的scale

從服務器獲取圖像數據時,應首先檢查設備屏幕的比例,然后請求相應的圖像大小(以像素為單位),如下所示:

if ([UIScreen mainScreen].scale == 1.0) {
    // Build URL for 60x60 pixels image
}
else {
    // Build URL for 120x120 pixels image   
}

然后你應該以適當的scale將圖像數據放在大小為60x60點的UIImage中:

NSData *imageData = [NSData dataWithContentsOfURL:url];
CFDataRef cfdata = CFDataCreate(NULL, [imageData bytes], [imageData length]);
CGDataProviderRef imageDataProvider = CGDataProviderCreateWithCFData (cfdata);
CGImageRef imageRef = CGImageCreateWithJPEGDataProvider(imageDataProvider, NULL, true, kCGRenderingIntentDefault);
UIImage *image = [[UIImage alloc] initWithCGImage:imageRef 
                                            scale:[UIScreen mainScreen].scale 
                                      orientation:UIImageOrientationUp];
CFRelease (imageRef);
CFRelease (imageDataProvider);
CFRelease(cfdata);

希望這可以幫助。

如果下載的圖像尺寸與UIImageView尺寸相差2倍。 iPhone4中的視網膜顯示效果很好。

另見: http//mobile.tutsplus.com/tutorials/iphone/preparing-your-iphone-app-for-higher-resolutions/

從網絡下載的圖像未針對Retina Display進行格式化,與您的應用程序捆綁的圖像(使用“@ 2x”后綴)相同。

您可以使用恰當命名的scale:和setScale:方法獲取/設置任何UIView的比例,以幫助您更好地顯示來自Web的內容,如果您知道它適用於Retina Display設備。

那么答案很簡單:

我建議始終從服務器下載雙密度圖像(因為非視網膜顯示的用戶非常少)並在imageview中進行設置。

您沒有正確執行的操作是您沒有將imageView設置為自動適合內容。 您可以通過選擇ImageView並將contentMode(模式)設置為縮放為Fill,或者通過代碼在IB中執行此操作:

imageView.contentMode = UIViewContentModeScaleToFill;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM