7

在我FirstViewController的设备是 iPhone4 或 iPhone5 的情况下,我已经为切换背景编写了这段代码:

文件名:bg-for5-568@2x.png
bg-for4@2x.png
bg-for4.png

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIImage *backgroundImage = [[UIImage alloc] init];
    if([[UIScreen mainScreen]bounds].size.height == 568)
    {
       backgroundImage = [UIImage imageNamed:@"bg-for5-568h"];
    }
    else
   {
       backgroundImage = [UIImage imageNamed:@"bg-for4"];
   }
   self.view.backgroundColor = [[[UIColor alloc] initWithPatternImage:backgroundImage] autorelease];
   [backgroundImage release];
}

当我在我的模拟器上启动应用程序时,iphone5 的背景显示双倍大小,不在视图中。

/* 已解决,谢谢 */

4

3 回答 3

5

我不确定这是否是解决此问题的方法,因为我缺少一些信息,但是:

.png首先:从你的imageNamed:方法中剥离。从iOS4开始,你不应该再这样做了。接下来是:您的图像的名称是什么?请注意,iPhone5 具有视网膜显示屏,您的图像应命名bg-for5-568h@2x.png但在源代码中称为bg-for5-568h.

除此之外:在您的图像不是照片的几乎所有情况下,您所做的都是一个坏主意。即使是照片,也只需为 iPhone 4 和 4S 使用更大的图像。它没有那么大,所以内存占用在这里不是问题!看看UIImageView's 的contentMode属性。您可以使用它来调整较大图像的位置。如果图像不是全屏的,您可能还需要检查UIImageViews属性来剪辑图像。clipSubviews

相信我,在我的公司里,我们有很多挂钩,比如 ~ipad、~iphone、~2x 甚至可拉伸的图像。直到今天,所有这些钩子都运行良好,苹果宣布了类似的东西,或者只是一种新设备。所以我决定不再做这些钩子了。首先它们似乎很有帮助,但是当市场上有新产品时遇到的麻烦是不值得的!

于 2012-10-19T10:50:54.793 回答
2

您应该将 @2x 后缀附加到所有视网膜图像。在您的情况下,您的图像应存储为“bg-for5-568h@2x.png”。希望它能解决问题。

于 2012-10-19T11:07:32.780 回答
1

我不建议这样做,如果 Apple 再次更改他们的屏幕尺寸并且您必须返回并重写所有代码怎么办?

一个简单的解决方法是使用:

  self.view.backgroundColor = [UIColor colorWithPatternImage:/* your image*/];

这可能会给您带来一些拉伸或平铺的问题。

我更喜欢使用

 UIImage* imageName = [[UIImage imageNamed:/*image name*/]resizableImageWithCapInsets:UIEdgeInsetsMake(top,left,bottom,right)];

在 iOS 6 中,您可以通过定义图像是拉伸还是平铺来进一步改进这一点。这允许您创建一个不会更改的边框,然后默认情况下将图像的中心平铺并填充图像视图的空间

于 2012-10-19T10:43:48.367 回答