0

寸法が200X100ピクセルのcool.pngファイルがあり、それを網膜と通常のデバイスの両方に使用したいとします。UIImageView 100X50ポイントのサイズを取得する必要があります。

画像のサイズに応じてUIImageViewのサイズを小さくしようとしましたが、スケール修飾子@ 2xを使用する場合と使用しない場合の2つのファイルを準備するか、UIImageViewを使用してcontentModeプロパティでスケーリングしても、視覚的に違いはわかりません。

BOOL retina = [[UIScreen mainScreen] scale] == 2.0 ? YES : NO;

UIImage *img = [UIImage imageNamed:@"cool.png"];

UIImageView *imgView = [[UIImageView alloc] initWithImage:img];
imgView.contentMode = UIViewContentModeScaleToFill;

CGFloat width = img.size.width;
CGFloat height = img.size.height;

if (!retina) {
   width = width/2.0;
   height = height/2.0;     
}

imgView.frame = CGRectMake (somePoint.x, somePoint.y, width, height); 

アプローチに何か問題がありますか?

4

1 に答える 1

1

あなたはここで間違ったアプローチを取っています。

CGRect、Point、およびSizeはピクセル単位で測定されません。これらはポイントです。ポイントはiOSの座標系であり、デバイスに合わせてスケーリングされます。たとえば、UIViewを320ポイント幅にすると、幅がいっぱいになります。網膜iPhoneまたはiPadの両方で...

したがって、cool.pngをすべてのデバイスで100x50ポイントで表示する場合は、フレームを100x50に設定し、画像をcool.pngに設定してから、imgView.contentViewをUIViewContentModeScaleAspectFitに設定します...これにより、非網膜デバイスに適合する200x100の画像...次に、網膜デバイスの場合、フル解像度(200x100)になりますが、100x50ポイントになります...

ただし、@ 2xシステムは、画像を縮小する必要があるため、縮小する必要があるため読み込み時間が長くなるという理由で作成されましたが、@ 2x画像を使用できない場合でも、上記を実行できます。

于 2012-05-15T21:07:29.730 に答える