切换背景图像iphone5 - iphone4

时间:2012-10-19 10:23:50

标签: iphone objective-c ios cocoa-touch

在我的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的背景在视图外显示双倍大小。

/ *谢谢你* /

3 个答案:

答案 0 :(得分:5)

我不确定这是否是这个问题的解决方案,因为我错过了一些信息,但是:

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

除此之外:几乎在你的图像不是照片的每一种情况下,你所做的都是一个坏主意。即使它是一张照片,也只需使用iPhone 4和4S的更大图像。它不是那么大,所以内存占用不是问题!查看UIImageView的{​​{1}}媒体资源。您可以使用它来调整较大图像的位置。如果图像不是全屏,您还可以检查contentMode s UIImageView属性以剪切图像。

相信我,在我的公司里,我们有一些像@ ipad,~iphone,~2x甚至可伸缩图像这样的东西的钩子。所有这些钩子工作正常,直到约会,苹果公布了类似的东西或简单的新设备。所以我决定不再做这种钩子了。它们在一开始似乎非常有用,但是当市场上出现新的东西时你遇到的麻烦是不值得的!

答案 1 :(得分:2)

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

答案 2 :(得分:1)

我不建议这样做,如果Apple再次更改屏幕大小并且你必须返回并重写所有代码该怎么办?

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

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

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

我更喜欢使用

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

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