1

我正在支持 iPhone 5 的旅途中。我很清楚 Interface Builder 中有 iOS 6 的自动布局功能。这很好,但有时我想加载我自己的图像,如果它是 iPhone 5。

因此,我的 iPhone 游戏中的一些图像正好是屏幕尺寸(320x480)或(640 x 960)。因此,如果我使用的是 iPhone 5,这些图像将不会覆盖整个屏幕。所以我将为这些全屏图像制作(640 x 1136)图像。

现在我知道,如果我只是将图像命名为: MyImage-568h@2x.png 它不会加载。那么,我将如何子类 UIImage 以便它加载不是默认图像的 -568h@2x 图像?

谢谢!

4

1 回答 1

1
  1. 懒惰的方式:

    UIImage * img = [UIScreen mainScreen].bounds.size.height > 500 ? [UIImage imageNamed:@"Default-568h.png"] : [UIImage imageNamed:@"Default.png"];
    

    我在一个应用程序中完成了这项工作,其中没有摄像头的设备上的主屏幕是Default.png;它似乎并不太老套,因为无论如何我们都需要更改 Default.png 以支持新设备。

  2. 不那么懒惰的方法:以您需要填充的空间为条件,而不是屏幕大小。

  3. 您要求的解决方案并不足以保证课程的通用性,但无论如何都是这样:

    @implementation MyImage
    +(UIImage)imageNamed:(NSString*)name {
      if ([UIScreen mainScreen].bounds.size.height > 500) {
        UIImage * img = [UIImage imageNamed:[name stringByAppendingString:@"-iPhone5"];
        if (img) { return img; }
      }
      return [UIImage imageNamed:name];
    }
    @end
    

    真的没有必要继承 UIImage。如果你觉得hacky,你可以patch/swizzle/otherwise+[UIImage imageNamed:]指向自定义方法,但我真的不建议这样做,除了调试。

于 2012-09-24T22:45:49.000 回答