Xcode 4.5如何设置iPhone 4、4s、5的背景图片?

6

我在viewController.m中编写了后台代码:

self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"image.png"]];

我有不同图片的正确名称:

image.png for non-retina display (320x480)

image@2x.png for retina display (640x960)

image-568h@2x.png for iPhone 5 (640x1136)

但是当我在模拟器中运行时,它不会使用image-568h@2x.png来适配iPhone 5的屏幕,而只能使用image@2x来适配4s的屏幕并缩放到适合屏幕大小... 我不知道是否有任何编码来使用image-568h@2x适配iPhone 5屏幕?

我正在使用Xcode 4.5


你正在使用哪个版本的Xcode? - Jigar Pandya
不要重新创建问题,考虑在原始问题中提供更多信息,获得一些声望并开始悬赏。 - A-Live
版本4.5,什么是开始悬赏的意思? - Peter
这意味着为回答此问题的人提供更多的积分... 如果您提供50个赏金,那么这将被添加到您接受答案的人,并从您的帐户中扣除... - Jigar Pandya
3个回答

13

iPhone 5和iPhone 4以及4S一样都是Retina屏幕,所有这些设备都将自动使用@2x图像。只有iPhone 5的启动画面被称为“-568h@2x”。您需要编写一些代码来使用不同的图片,以下代码可以使用:

NSString *filename = @"image.png";
CGRect screenRect = [[UIScreen mainScreen] bounds];
if (screenRect.size.height == 568.0f)
    filename = [filename stringByReplacingOccurrencesOfString:@".png" withString:@"-568h.png"];

imageView.image = [UIImage imageNamed:filename];

这里的"imageView"是不是需要@synthesize?或者呢..? - Peter
1
请查看这个示例项目:https://www.dropbox.com/s/gcc081dy0frs20z/RetinaImageTest.zip。如果您在不同的模拟器设备上运行它,您将会看到三张不同(非常丑陋)的图片 :) 它们当然应该是不同的分辨率,但这只是一个概念验证。 - TheQ

3
如果您尝试使用[UIImage imageNamed:@"image.png"],并期望从iPhone 5的包中自动选择image-568h@2x.png,那么这是行不通的。自动选择仅适用于iPhone 4和4S。
只有名为Default-568h@2x.png的默认图像会在iPhone 5中自动选择。
对于普通图像,如果您有单独的iPhone 5图像,请尝试使用此代码。
CGRect screenBounds = [[UIScreen mainScreen] bounds];
if (screenBounds.size.height == 568) {
    // code for 4-inch screen
} else {
    // code for 3.5-inch screen
}

2

我认为假设你可以将-568h@2x技巧应用于所有图像文件是不正确的,我认为这只适用于Default-568h@2x.png。 这是iOS在4英寸显示设备上启动应用程序时查找的文件,以及启用SDK中4英寸显示支持的“标志”。例如,一旦您包含了此特定文件,您的表视图将填充屏幕。

我没有看到任何提示,表明您可以使用带有-568h@2x文件名组件的任何图像自动使用它。 您需要根据屏幕大小自行完成,例如[UIScreen mainScreen].bounds.size.height


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