0

  Xcode 4.5.2 を使用しています。このアプリは iOS 6.0 を対象としています。私のアプリケーションでは、iPad Retina 画像の表示に問題があります。@2x~ipad.png 拡張子を使用して適切に表示する必要があることはわかっています。私の画像はそれに応じて名前が付けられているため、各デバイスの拡張子以外はすべて同じ名前になっています。こう名付けました。

ここに画像の説明を入力

でも、

 NSString *name=@"appearanceConnection.png";
 //NSString *name=@"appearanceConnection"; //I did check this
 //I did check the target
 UIImage *image = [UIImage imageNamed:name];
 NSLog(@"%f",image.size.width);

@1x 画像の幅を表示します。

適切なイメージ名を手動で設定しようとすると:

  if ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] &&
            ([UIScreen mainScreen].scale == 2.0)) {
            // Retina display
            name=@"appearanceConnection@2x~ipad.png";

            NSLog(@"retina");
        }
        else
        {
            name=@"appearanceConnection.png";
            NSLog(@"non-retina");
        }
     UIImage *image = [UIImage imageNamed:name];
     NSLog(@"%f",image.size.width);

適切な @2x が選択され、ビューに追加するときに 2.0 倍にスケーリングされます。

プロジェクトを何度もクリーンアップ/再ビルドし、IOS シミュレーターの設定をリセットしましたが、結果はありません。
私は何を間違っていますか?

更新:
非網膜

ここに画像の説明を入力

網膜:

NSLog(@"%f", image.scale)

メソッドの後、imageNamed1.0が得られます

ここに画像の説明を入力

更新 2: アニメーションの外観を最適化しようとしているので、1 つの大きな画像を一度読み込んで、フレームごとにカットしたいと考えています。最初に大きな画像 (@2x または 1@x) をロードし、次にサイクルを使用します

for (int i = 0; i<numberOfFrames; i++)
    {
        CGImageRef imageRef = CGImageCreateWithImageInRect(image.CGImage,
                                                           CGRectMake(i*width, 0.0f, width, height));
        UIImage *animationImage = [UIImage imageWithCGImage:imageRef];

        if (isFlip)
        {
            [animationImages insertObject:animationImage atIndex:0];
        }
        else
        {
            [animationImages addObject:animationImage];
        }

        CGImageRelease(imageRef);
    }

この大きな画像を切り取り、アニメーションを作成します。Retina ディスプレイの場合、幅と高さは 2 倍になります。

多分ここに注意事項がありますか?

UIImage *animationImage = [UIImage imageWithCGImage:imageRef];

2 倍に拡大された画像を返しますか?

ただし、この画像で初期化された (0.5,0.5) UIImageView をスケーリングすると、収まります。なぜ 2 倍にスケーリングしたのか、何か考えはありますか?

4

1 に答える 1

3

網膜画像と非網膜画像は、UIImage などとして使用すると同じ幅と高さになります。網膜ディスプレイでは、幅や高さではなく、画像の DPI が 2 倍になると考えてください。

これは、網膜と非網膜のコーディング時に透明性を維持するためです。

于 2013-03-26T09:27:41.067 に答える