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)
メソッドの後、imageNamed
1.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 倍にスケーリングしたのか、何か考えはありますか?