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 没有不同的像素密度,它与 iPhone 4/4S 的视网膜显示 PPI 相同,只是屏幕尺寸不同。@2x 图像将用于 iPhone 5 和 4/4S。

于 2012-09-19T15:28:58.743 回答
1

为了完成 Jason 的回答,我建议:如何覆盖UIImage'imageNamed:方法以使其在图像名称的“-568”后缀中发生?或者添加一个新方法调用resolutionAdaptedImageNamed:UIImage可能使用类别。

如果接下来几天我有一点时间,我会尝试发布代码。

注意:不适用于 Nib 文件中的图像。

于 2013-02-11T14:47:16.430 回答
1

如果您使用的是 Xcode 5,则可以使用资产目录(请参阅Apple 文档中的用法)

创建资产目录后,[ UIImage imagedNamed: @"your_image_set" ]将根据设备提取正确的图像。

于 2013-11-27T11:03:45.607 回答
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 回答