網膜では、名前に@ 2xを使用して画像を作成します。デフォルトの画像をdefault-568h @ 2xにする必要がある場所はわかりますが、他の画像の場合はそうではないようです。背景がbg.pngと[email protected]であるかのように、bg-568h @ 2x.pngを使用してみましたが、機能しません。 iPhone 5をサポートするために画像に付ける必要がある名前を誰かに教えてもらえますか?
特定の画像名はありません。 Default-568h @ 2xを使用すると、iPhone 5またはiPod Touch 5Gでそのイメージが起動し、非レターボックスモードが有効になります。その後、ビューを柔軟に設計する必要があります。新しいサイズに特別な「イメージ名」などはありません。
たとえば、背景には、ストレッチまたはタイリングが可能な画像を使用し、設定する前に適切に設定する必要があります。
IPhone 5(4 ''ディスプレイ)の特別なサフィックスはなく、特定の[email protected]ファイルのみです。
これを処理するマクロは次のとおりです。
// iPhone 5 support
#define ASSET_BY_SCREEN_HEIGHT(regular, longScreen) (([[UIScreen mainScreen] bounds].size.height <= 480.0) ? regular : longScreen)
使用法:(アセット名-image.png、image @ 2x.png、image-568h @ 2x.png)
myImage = [UIImage imageNamed:ASSET_BY_SCREEN_HEIGHT(@"image",@"image-568h")];
iPhone 5はピクセル密度に違いはありません。網膜ディスプレイと同じですPPI iPhone 4/4Sと同じです。画面サイズが異なります。@ 2x画像はiPhone 5で使用されます。同様に4/4S。
Jasonの回答を完成させるために、次のことを提案します。UIImage
のimageNamed:
メソッドをオーバーライドして、イメージ名のサフィックス「-568」が発生するようにするにはどうすればよいですか。または、カテゴリを使用して、UIImage
にresolutionAdaptedImageNamed:
という新しいメソッドを追加することもできます。
次の日に少し時間があれば、そのためのコードを投稿しようとします。
注意:Nibファイルの画像には使用できません。
Xcode 5を使用している場合は、アセットカタログを使用できます(使用方法を参照 Appleのドキュメント )
アセットカタログが作成されたら、[ UIImage imagedNamed: @"your_image_set" ]
は、デバイスに基づいて正しいイメージをプルします。
以下のように、このカテゴリを作成することもできます。
UIImage+Retina4.h
#import <UIKit/UIKit.h>
#import <objc/runtime.h>
@interface UIImage (Retina4)
@end
UIImage+Retina4.m
#import "UIImage+Retina4.h"
static Method origImageNamedMethod = nil;
@implementation UIImage (Retina4)
+ (void)initialize {
origImageNamedMethod = class_getClassMethod(self, @selector(imageNamed:));
method_exchangeImplementations(origImageNamedMethod,
class_getClassMethod(self, @selector(retina4ImageNamed:)));
}
+ (UIImage *)retina4ImageNamed:(NSString *)imageName {
// NSLog(@"Loading image named => %@", imageName);
NSMutableString *imageNameMutable = [imageName mutableCopy];
NSRange retinaAtSymbol = [imageName rangeOfString:@"@"];
if (retinaAtSymbol.location != NSNotFound) {
[imageNameMutable insertString:@"-568h" atIndex:retinaAtSymbol.location];
} else {
CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;
if ([UIScreen mainScreen].scale == 2.f && screenHeight == 568.0f) {
NSRange dot = [imageName rangeOfString:@"."];
if (dot.location != NSNotFound) {
[imageNameMutable insertString:@"-568h@2x" atIndex:dot.location];
} else {
[imageNameMutable appendString:@"-568h@2x"];
}
}
}
NSString *imagePath = [[NSBundle mainBundle] pathForResource:imageNameMutable ofType:@"png"];
if (imagePath) {
return [UIImage retina4ImageNamed:imageNameMutable];
} else {
return [UIImage retina4ImageNamed:imageName];
}
return nil;
}
@end
そして、あなたは568または通常の画像をチェックしない以下のようにこのカテゴリをインポートして直接チェックすることができます
imgvBackground.image=[UIImage imageNamed:@"bkground_bg"];//image name without extantion