1

私はiPhone5をサポートするために航海中です。InterfaceBuilderにiOS6の自動レイアウト機能があることをよく知っています。これは素晴らしいことですが、iPhone 5の場合は、自分の画像をロードしたいことがあります。

したがって、iPhone用の私のゲームの画像の一部は、画面のサイズ(320x480)または(640 x 960)とまったく同じです。したがって、iPhone 5を使用している場合、これらの画像は画面全体をカバーしません。そこで、これらのフルスクリーン画像用に(640 x 1136)画像を作成します。

これで、画像にMyImage-568h@2x.pngという名前を付けるだけでは、画像が読み込まれないことがわかりました。では、デフォルトの画像ではない-568h @ 2x画像を読み込むように、UIImageをサブクラス化するにはどうすればよいでしょうか。

ありがとう!

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をサブクラス化する必要は実際にはありません。本当にハッキーだと感じている場合は、パッチを適用したり、スウィズルしたり、その他+[UIImage imageNamed:]の方法でカスタムメソッドを指定したりできますが、デバッグを除いて、これはお勧めしません。

于 2012-09-24T22:45:49.000 に答える