35

Retina では、名前に @2x を含む画像を作成します。デフォルトの画像が default-568h@2x でなければならない場所はわかりますが、これは他の画像には当てはまらないようです。背景が bg.png と bg@2x.png の場合のように、bg-568h@2x.png を使用してみましたが、うまくいきません。iPhone 5 をサポートするために必要な画像の名前を誰か教えてもらえますか?

4

6 に答える 6

56

iPhone 5 (4 インチ ディスプレイ) 用の特別なサフィックスはなく、特定の Default-568h@2x.png ファイルのみです。

これを処理するマクロは次のとおりです。

// 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")];
于 2012-09-24T10:44:57.787 に答える
25

特定の画像名はありません。Default-568h@2x を指定すると、iPhone 5 または iPod Touch 5G でそのイメージが起動され、非レターボックス モードが有効になります。その後、ビューを柔軟に設計する必要があります。新しいサイズには特別な「画像名」などはありません。

たとえば、背景の場合、おそらくストレッチまたはタイリングが可能な画像を使用し、設定する前に適切に構成する必要があります。

于 2012-09-19T15:25:47.820 に答える
1

iPhone 5 はピクセル密度に違いはなく、Retina ディスプレイの PPI は iPhone 4/4S と同じで、画面サイズが異なるだけです。@2x 画像は、iPhone 5 と 4/4S で使用されます。

于 2012-09-19T15:28:58.743 に答える
1

Xcode 5 を使用している場合は、アセット カタログを使用できます (使用方法については、Apple のドキュメントを参照してください) 。

アセット カタログが作成さ[ UIImage imagedNamed: @"your_image_set" ]れると、デバイスに基づいて適切なイメージが取得されます。

于 2013-11-27T11:03:45.607 に答える
1

ジェイソンの答えを完成させるために、私は提案します:UIImageimageNamed:メソッドをオーバーライドして、イメージの名前に「-568」サフィックスを付けることはどうですか? resolutionAdaptedImageNamed:または、UIImageおそらくカテゴリを使用して呼び出される新しいメソッドを追加します。

次の日に少し時間があれば、そのコードを投稿しようと思います。

注意: Nib ファイルの画像では機能しません。

于 2013-02-11T14:47:16.430 に答える
0

以下のようにカテゴリを作成することもできます。

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
于 2013-03-07T07:14:29.627 に答える