iPhone 5的新图像名称

在视网膜上,我们用名字中的@ 2x来制作图像。 我看到默认图像的默认位置是568h @ 2x,但对于其他图像看起来并不是这样。 如果我的背景是bg.png和bg@2x.png,我尝试使用bg-568h@2x.png,但这不起作用。 有人可以告诉我图像需要命名以支持iPhone 5吗?

没有具体的图像名称。 使用Default-568h @ 2x将在iPhone 5或iPod Touch 5G上启动该图像,并启用非信箱模式。 之后,你需要devise你的观点是灵活的。 没有特殊的“图像名称”或任何新的大小。

例如,对于您的背景,您可能应该使用能够拉伸或平铺的图像,并在设置之前对其进行正确configuration。

iPhone 5(4“显示器)没有特殊的后缀,只是特定的Default-568h@2x.png文件。

这是一个macros来处理它:

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

为了完成贾森的回答,我会build议:怎么样覆盖UIImageimageNamed:方法让它发生“-568”后缀的图像的名称? 或者添加一个名为resolutionAdaptedImageNamed:的新方法resolutionAdaptedImageNamed:可能使用一个类别到UIImage

如果我在接下来的几天里有一些时间,我会尽量发布代码。

警告:对于Nib文件中的图像不起作用。

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

一旦你的资产目录被创build[ 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