我想为每个设备指定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
设备指定图片。所以启动图像没问题。
在.xcassets
文件中,我可以选择1x
,2x
,Retina 4 2x
和3x
。但是iPhone 6 (1334x750)
设备没有选项。
那么如何为iPhone 6设备提供1334x750 px
图像呢?使用.xcassets
文件寻找一些解决方案,而不是通过以编程方式为每个设备加载图像。
我已经访问了相关的SO问题,但没有一个问题专门针对iPhone 6设备图像。
iPhone 6 Plus resolution confusion: Xcode or Apple's website? for development
答案 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)提供单独的图像。
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了解设备字符串。
还有其他一些以编程方式执行此操作的方法,但截至目前,在我所知的界面构建器中没有明确的方法可以执行此操作。随意指出我的错误。