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

18

我想为不同的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's 问题,但没有一个专门回答 iPhone 6 设备图片的问题。

iPhone 6 Plus 分辨率混淆:Xcode 还是 Apple 的网站?进行开发

xcode 6 资源目录 iphone 6


Retina 4.7与Retina 4 @2x相同。iPhone 6为326 ppi,Plus为401 ppi。 - Valar Morghulis
那我应该为所有图片提供667x375的尺寸,而完全跳过568x320的尺寸吗? - Khawar
跳过 667x375,提供所有图片的 568x320(1136 x 640 分辨率)的尺寸。 - Valar Morghulis
那么568x320(较小的分辨率)将被重新采样为667x375(较大的分辨率)。这样做会在图像中添加失真吗? - Khawar
@AadilAli,如果我的设计需要为iPhone 5和6提供不同的图片怎么办? - Khawar
显示剩余4条评论
3个回答

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
谢谢回复。但是正如我在问题中已经描述的那样,我正在寻找一些不需要编程的解决方案。 - Khawar
5
如果没有这样的答案(我不相信有),那么这就是你的答案。 - Stephen Darlington
谢谢伙计!不再使用if语句,我还会使用高度来区分4和5。 - Markus

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进行渲染。您可以为 iPhone 4 做类似 这篇文章 的内容

更新 Xcode 7

Xcode 7 中不再有 Images.xcassets 中单独图像的选项,我们必须使用相同的2x图像适配所有Retina设备,以及3x图像适配Retina HD设备。


你还没有回答问题。楼主已经回答了,并且他已经提供了你的链接。 - Sega-Zero
我认为2x图标应该在iPhone 4/4S上使用,而不是iPhone 6? - xi.lin
2x图片适用于所有的retina设备,虽然在Xcode 6中它们为iPhone 5单独提供了选项,但在Xcode 7中将其删除了。 - Abhishek

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)";

等等,你可以在这里了解有关设备字符串的信息。

还有其他一些编程方式可以实现此功能,但目前我所知道的界面构建器中没有明确的方法。欢迎指出我的错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接