【问题标题】:switch background image iphone5 - iphone4切换背景图片 iphone 5 - iphone 4
【发布时间】:2012-10-19 10:23:50
【问题描述】:

在我的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 的背景显示为两倍大小,超出了视图。

/* 已解决,谢谢*/

【问题讨论】:

  • 它将加倍大小,因为它是双倍大小,iOS 将对其进行拉伸,以便图像的 1 个像素将显示在图形窗格的 1.0“像素”中,该窗格在视网膜设备上拉伸超过 2 个硬件像素.有几种方法可以处理这个问题。最简单的方法是将该行代码中的“bg-for5-568h@2x”更改为“bg-for5-568h”,但不要更改 png 文件的名称。
  • 非常感谢!现在完美的作品。

标签: iphone objective-c ios cocoa-touch


【解决方案1】:

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

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

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

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

【讨论】:

  • 我已经编辑了我的代码,每个视图都有不同的背景。不知道是因为在iphone5的背景下显示的比较大,看不到。
  • 去掉你编辑的代码中的@2x!只是图片应该用@2x命名,在代码中,只需输入文件名!
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

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

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

    我更喜欢使用

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

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

    【讨论】:

    • 这仅在您必须支持 ipad 和 iphone 或 iphone 时才有效。这不适用于 iphone 4 和 iphone 5(该死的苹果!)
    • 它适用于 iPhone 4 和 iPhone 5。您需要将 imageview 的框架设置为 self.view.bounds
    • 嗯,看苹果参考资料没找到,Xib也能用吗?
    • 我已经编辑了我的代码,每个视图都有不同的背景。不知道是因为在iphone5的背景下显示的比较大,看不到。
    • developer.apple.com/library/ios/#documentation/UIKit/Reference/… resizableImageWithCapInsets:resizingMode:
    猜你喜欢
    • 2012-10-15
    • 2023-03-05
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-28
    相关资源
    最近更新 更多