7

デバイスがiPhone4またはiPhone5の場合、FirstViewController私はバックグラウンドを切り替えるためにこのコードを書きました:

ファイル名: 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 の背景が 2 倍のサイズで表示されなくなります。

/* 解決しました ありがとうございます */

4

3 に答える 3

5

一部の情報が不足しているため、これがこの問題の解決策であるかどうかはわかりませんが、

最初に:メソッド.pngから を取り除きますimageNamed:。iOS4 以降、これを行うべきではなくなりました。次は、あなたのイメージの名前は何ですか? iPhone5 には Retina ディスプレイがあり、画像には名前を付ける必要がありますbg-for5-568h@2x.pngが、ソースコードでは として参照する必要があることに注意してくださいbg-for5-568h

それに加えて、画像が写真ではないほとんどすべての場合、あなたがしていることは悪い考えです. 写真であっても、iPhone 4 と 4S の場合は大きい方の画像を使用してください。それほど大きくないので、メモリ フットプリントはここでは問題になりません。UIImageViewさんのcontentMode物件をご覧ください。これを使用して、大きな画像の位置を調整できます。フルスクリーンでない場合は、UIImageViewsプロパティをチェックして画像をクリップすることもできます。clipSubviews

私の会社では、~ipad、~iphone、~2x、さらには伸縮可能な画像などのフックがたくさんありました。そして、これらすべてのフックは日付まで問題なく機能し、Apple は同様のデバイスまたは単に新しいデバイスを発表しました。だから私はこの種のフックをもうやらないことに決めました。そもそも非常に役立つように見えますが、新しいものが市場に出回ったときに発生する問題は、それだけの価値はありません。

于 2012-10-19T10:50:54.793 に答える
2

すべての網膜画像に @2x サフィックスを追加する必要があります。あなたの場合、画像は「bg-for5-568h@2x.png」として保存する必要があります。問題が解決することを願っています。

于 2012-10-19T11:07:32.780 に答える
1

これを行うことはお勧めしません。Appleが画面サイズを再度変更し、戻ってすべてのコードを書き直さなければならない場合はどうなりますか?

簡単な修正は次を使用することです:

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

これにより、ストレッチやタイリングで問題が発生する可能性があります。

私は使用するのが好きです

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

iOS 6では、画像を引き伸ばすか並べて表示するかを定義することで、これをさらに改善できます。これにより、変更されない境界線を作成し、デフォルトで画像の中心を並べて表示し、画像ビューのスペースを埋めることができます。

于 2012-10-19T10:43:48.367 に答える