1

iPhone には bg.png を、iPhone retina と iPad には bg@2x を、iPad retina には bg@4x を使用します。ここに私が書いたコードがあります:(Helper.mで)

+ (UIImage *) imageNamed:(NSString *)name
{
    name = [name stringByReplacingOccurrencesOfString:@".png" withString:@""];
    UIImage *image;
    if (IS_IPAD) {
        if (IS_RETINA) {
            image = [UIImage imageNamed:[NSString stringWithFormat:@"%@@4x.png", name]];
            if (image) {
                return image;
            }
        }

        return [UIImage imageNamed:[NSString stringWithFormat:@"%@@2x.png", name]];
    }
    else {
        if (IS_RETINA) {
            image = [UIImage imageNamed:[NSString stringWithFormat:@"%@@2x.png", name]];
            if (image) {
                return image;
            }
        }
        return [UIImage imageNamed:name];
    }
}

ファイルは正しいですが、画像のサイズが間違っています。

ファイルがシステムによって自動的に選択された場合 ( を使用[UIImage imageNamed:@"bg.png"])、iPhone Retina では、サイズは 320x480 (1 ポイント = 4 ピクセル) のままです。

を使用する[Helper imageNamed:@"bg.png"]と、サイズは 640x960 になります。(1 ポイント = 1 ピクセル)

とにかくサイズを修正するには?

4

2 に答える 2

8

Retina デバイスの場合

 [UIImage imageNamed:@"bg.png"]

最初に検索しbg@2x.pngます。その画像が存在する場合、それが読み込まれscale、画像のプロパティが自動的に に設定され2.0ます。一方で、

 [UIImage imageNamed:@"bg@2x.png"]

もそのイメージをロードしますが、デフォルトを使用しますscale = 1.0

カスタムの読み込みメカニズムを使用する必要がある場合は、倍率を調整する必要があります。scaleは読み取り専用のプロパティであるためUIImage、直接設定することはできません。私が知っている1つの方法は

UIImage *tmpImage = [UIImage imageNamed:@"bg@2x.png"];
UIImage *properlyScaledImage = [UIImage imageWithCGImage:[tmpImage CGImage]
                                           scale:2.0
                                     orientation:UIImageOrientationUp];
于 2013-06-29T16:20:21.497 に答える
5

Apple がすでに提供しているものを再発明する理由は何ですか? このメソッドは、サフィックスとサフィックスimageNamed:を使用して、iPhone または iPad 固有のイメージをロードする機能を既にサポートしています。~iphone~ipad

iPad 固有の Retina イメージを取得するには、名前を付けるだけですbg@2x~ipad.png。iPad 固有の非 Retina イメージを取得するには、名前を付けますbg~ipad.png

コードの問題は、非標準の命名規則が原因であり、画像が間違った縮尺で読み込まれます。

更新: コメントの追加情報に基づいて、この問題を解決するためのより良いアプローチは、メソッドの使用をUIImage imageNamed:メソッドの呼び出しに置き換えることUIImage imageWithData:scale:です。これにより、メモリ管理が向上するだけでなく、カスタム命名規則に適切なスケールを指定したり、iPhone Retina と iPad 非 Retina 間で画像を共有したりできます。

于 2013-06-29T15:58:12.463 に答える