3

次のコードを使用して、iOS アプリケーションのテーブル ビューに表示するために Web サーバーから画像をダウンロードしています。

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

画像ビューは 60x60 のプレースホルダーで、Retina ディスプレイの場合は 120x120 です。ユーザーが iPhone 4 を使用していると仮定します。ただし、画像のサイズを 120x120 に変更しても問題は解決せず、画像ビューに対して大きすぎます。つまり、Webサーバーで画像のサイズを60x60にすると、画像はうまく収まりますが、少しぼやけます。この問題を解決する方法を知っている人はいますか?

ありがとう!

4

4 に答える 4

4

UIImageViewまず、が 60x60ポイントであることに同意しましょう。これは、標準ディスプレイでは60x60ピクセル、Retina ディスプレイでは 120x120ピクセルを意味します。

UIImageView60x60 ポイントの場合、イメージは標準ディスプレイのスケール 1.0 で 60x60 ピクセル、Retinaディスプレイのスケール 2.0で 120x120 ピクセルである必要があります。これは、UIImage常にsize60x60 ポイントを持つ必要がありますがscale、ディスプレイの解像度によって異なる必要があることを意味します。

サーバーから画像データを取得するときは、まずデバイスの画面のスケールを確認してから、次のように適切な画像サイズ (ピクセル単位) を要求する必要があります。

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

次に、画像データを適切なUIImageサイズの60x60ポイントに配置する必要がありますscale

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);

お役に立てれば。

于 2012-06-27T11:03:21.687 に答える
0

答えは可能な限り簡単です。

サーバーから常に倍密度画像をダウンロードし (非 Retina ディスプレイを使用するユーザーは非常に少ないため)、imageview で設定することをお勧めします。

あなたが正しくしなかったのは、コンテンツに自動的に合うように imageView を設定しなかったことです。IB で ImageView を選択し、contentMode (モード) を Fill にスケーリングするように設定するか、コードでこれを行うことができます。

imageView.contentMode = UIViewContentModeScaleToFill;
于 2012-05-09T11:50:52.857 に答える
0

ダウンロードした画像のサイズが UIImageView のサイズの 2 倍の場合。iPhone4のRetinaディスプレイとしては綺麗です。

そこも参照してください:http://mobile.tutsplus.com/tutorials/iphone/preparing-your-iphone-app-for-higher-resolutions/

于 2012-05-09T03:35:22.607 に答える
0

Web からダウンロードした画像は、アプリにバンドルされている画像 (「@2x」サフィックスを使用) とは異なり、Retina ディスプレイ用にフォーマットされていません。

適切な名前の scale: および setScale: メソッドを使用して任意の UIView のスケールを取得/設定すると、Retina ディスプレイ デバイス向けであることがわかっている場合に、Web からのコンテンツをより適切に表示できます。

于 2012-05-09T03:37:46.380 に答える