0

Retina スクリーン用に画像を 320x100 ポイントにしたい場合、画像を 640x200 ピクセルにして @2x という名前にする必要があります。問題は、サイズが 640x200 ピクセルの Web サービスから画像をダウンロードするときです。通常、@2x 画像は電話では 320x100 ポイントのサイズに変換されますが、Web サービスからの画像は依然として 640x200 ポイントです。

注 - Web サービスは私自身のものなので、Web サービスの問題であれば修正できます。

申し訳ありませんが、問題をうまく表現していない可能性がありますが、これは私が意味するものです(同様): Retinaディスプレイと[UIImage initWithData]

4

2 に答える 2

1

コントロールの高さと幅をポイント単位で手動で設定する必要があります。これにより、不必要に縮小することなく、より高い DPI で画像が自動的に表示されます。

于 2013-05-30T14:20:21.263 に答える
0

@2x 画像は、imageNamed を介して読み込まれなかった場合、常に非 Retina 画像の 2 倍の大きさになります。

Retina デバイスと非 Retina デバイスで次のようなイメージを作成します。

UIImage *anImage = [UIImage imageNamed: @"anImageName"];
NSLog(@"%@: scale: %f", NSStringFromCGSize(anImage.size), anImage.scale);

Retina デバイスに印刷される CGSize オブジェクトは、非 Retina イメージと同じサイズになりますが、スケールは 2.0 に設定されます。

明示的な retina サフィックスを使用して画像を作成すると、画像が実際には 2 倍の大きさであることがわかります。そのため、imageNamed は独自の画像スケーリングを行います。

これを既に作成されたサイズの画像ビューに表示したい場合は、何もする必要はありません。直接ロードするだけで、画像ビューは画像を正しいサイズに調整します。

ただし、新しい画像ビューを作成する場合は、UIScreen の解像度に注意してフレームを作成する必要があります (残念ながら、scale プロパティを読み取り専用に設定することはできません)。

CGRect newFrame = CGRectZero;
newFrame.size.width = (anImage.size.width / [UIScreen mainScreen].scale);
newFrame.size.height = (anImage.size.height / [UIScreen mainScreen].scale);

これは、Web サービスがデバイスの画面が Retina かどうかを認識していることを前提としています。これを自動的に取得するサービスもあれば、事前に伝える必要があるサービスもあります。YMMV。

于 2013-05-30T14:24:53.313 に答える