Xcode 6如何为iPhone 5和6设备设置单独的@ 2x图像?

时间:2014-11-11 06:59:39

标签: ios iphone ios8 xcode6

我想为每个设备指定iPhone的不同背景图像。喜欢这个

iPhone 6 Plus   1242x2208 pixels    bg@3x.png
iPhone 6        750x1334  pixels    bg@2x.png
iPhone 5        640x1136  pixels    bg@2x.png
iPhone 4        640x960   pixels    bg@2x.png
iPhone 3GS      320x480   pixels    bg.png

LaunchImage中,可以选择为Retina HD 4.7设备指定图片。所以启动图像没问题。

enter image description here

.xcassets文件中,我可以选择1x2xRetina 4 2x3x。但是iPhone 6 (1334x750)设备没有选项。

enter image description here

那么如何为iPhone 6设备提供1334x750 px图像呢?使用.xcassets文件寻找一些解决方案,而不是通过以编程方式为每个设备加载图像。

我已经访问了相关的SO问题,但没有一个问题专门针对iPhone 6设备图像。

iPhone 6 Plus resolution confusion: Xcode or Apple's website? for development

xcode 6 asset catalog iphone 6

3 个答案:

答案 0 :(得分:1)

像这样设置你的图像名称;

  

image-320 @ 2x // iPhone 5

     

image-375 @ 2x // iPhone 6

NSNumber *screenWidth = @([UIScreen mainScreen].bounds.size.width);
NSString *imageName = [NSString stringWithFormat:@"image-%@", screenWidth];
UIImage *image = [UIImage imageNamed:imageName];

答案 1 :(得分:1)

Images.xcassets可以选择为iPhone 5(Retina 4 @ 2x),iPhone 6(@ 2x)和iPhone 6 plus(3x)提供单独的图像。

enter image description here

iPhone 4资产没有选项(可能苹果正在停止支持iPhone 4),而iPhone 4也需要@ 2x图像(缩放模式),但你可以为iPhone 4做This post之类的事情

更新Xcode 7

现在Xcode 7中没有与Images.xcassets分开的单独图像的选项,我们必须为所有Retina设备使用相同的2x图像,为Retina HD设备使用3x图像

答案 2 :(得分:0)

如果您想在不同的设备上明确地执行不同的操作,您现在需要在代码中执行此操作,例如Valar Morghulis said

NSNumber *screenWidth = @([UIScreen mainScreen].bounds.size.width);
NSString *imageName = [NSString stringWithFormat:@"image-%@", screenWidth];
UIImage *image = [UIImage imageNamed:imageName];

或者,您可以使用UIDevice类来获取该信息。它有几个带布尔返回的方法,您可以使用它们来获取有关设备的各种信息:

[[UIDevice currentDevice] platform]
[[UIDevice currentDevice] hasRetinaDisplay]
[[UIDevice currentDevice] hasMultitasking]

或者,您可以加入<sys/sysctl.h>和;

NSString *platform = [self platform];

if ([platform isEqualToString:@"iPhone3,1"])    return @"iPhone 4";
if ([platform isEqualToString:@"iPhone3,3"])    return @"Verizon iPhone 4";
if ([platform isEqualToString:@"iPhone4,1"])    return @"iPhone 4S";
if ([platform isEqualToString:@"iPhone5,1"])    return @"iPhone 5 (GSM)";
if ([platform isEqualToString:@"iPhone5,2"])    return @"iPhone 5 (GSM+CDMA)";
等等等等。您可以在here了解设备字符串。

还有其他一些以编程方式执行此操作的方法,但截至目前,在我所知的界面构建器中没有明确的方法可以执行此操作。随意指出我的错误。