子类UIImage imageNamed:?

时间:2012-09-24 22:32:43

标签: ios image cocos2d-iphone iphone-5

我正在航行中支持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图像而不是默认图像?

谢谢!

1 个答案:

答案 0 :(得分:1)

  1. 懒惰的方式:

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

    我在一个应用程序中完成了这项工作,其中没有摄像头的设备上的主屏幕是Default.png;它似乎 hacky因为我们需要更改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,你可以补丁/ swizzle /否则+[UIImage imageNamed:]指向一个自定义方法,但我真的不建议除了调试。