ios - 子类 UIImage imageNamed :?

标签 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. 懒惰的方式:

    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。如果你觉得真的很老套,你可以 patch/swizzle/otherwise +[UIImage imageNamed:] 指向一个自定义方法,但我真的不推荐除了调试。

关于ios - 子类 UIImage imageNamed :?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12573853/

相关文章:

ios - 通过 Perform Segue 将特定值从 TableViewCell 发送到 ViewController

ios - 如何从后台线程返回天气数据?

ios - UILabel 自动换行

android - 如何在android中将图库或捕获的图像上传到服务器

javascript - KineticJs Canvas 中用户的图像 uploader

ios - Xcode 管理器 .ipa 文件未显示正常选项

c++ - 如何为 cocos2dx 窗口设置标题和全屏标志

ios - 模糊效果 - 背景 UITextField

python - 在 python PIL 中使用三次插值放大图像

ios - cocos2d闪烁