13

play.png画像をビューに配置します。ビューが最初に読み込まれると、iPhone 4は対応するplay@2x.pngファイルを取得し、見栄えがします。ただし、再生ボタンをタップすると、コードがそれをpause.pngファイルと交換します。次に、pause.pngをタップしてplay.pngを戻すと、元のplay.pngファイルが使用されます(自動的に参照されると思っていた@ 2xバージョンではありません)。

これは私が使おうとしたコードです:

[button setImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateNormal];

したがって、最初のビューのロード後にファイルを交換する場合、IFステートメント内で@ 2xバージョンを手動で指定する必要がありますか?もしそうなら、UIScreen.scaleはこれに使用するのに最適な属性ですか?

私は現在、次のようなコードを使用しています。

if ([UIScreen mainScreen].scale > 1.0) 
{ 
    [button setImage:[UIImage imageNamed:@"play@2x.png"] forState:UIControlStateNormal]; 
} 
else 
{ 
    [button setImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateNormal]; 
}

正常に動作していますが、IFステートメントが含まれていると煩わしく、少し壊れやすいようです。

そこにいるすべてのあなたの賢い人に前もって感謝します。

4

9 に答える 9

25

条件文は不要です。次の行で十分です。

[button setImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateNormal];

iOS 4.0では、デバイスがiPhone 4であり、Retinaディスプレイを備えている場合、imageNamed:メソッドは自動的に「@2x」ファイル名サフィックスを検索します。以前のバージョンのiPhoneOSでは、imageNamed:メソッドは、ユーザーが書き込んだもの(つまり、低解像度の画像)のみを検索します。これが機能するのは、iPhone 4のOSバージョンが4.0よりも低いため、Retinaディスプレイのユーザーは常に高解像度のアートワークを使用できるからです。

于 2010-08-11T19:31:12.200 に答える
8

あなたはただ使うことができます:

[UIImage imageNamed:@"play"]

拡張子なし。これにより、@ 2xバージョンが利用可能で、デバイスにx2スケールがある場合にロードされます。

これはiOS4以降で機能します。ただし、以前のバージョンでアプリケーションを実行する場合は、次のようにすることができます。

UIImage* image = [UIImage imageNamed:@"play"]; // for iOS 4 or greater
if(!image)
    image = [UIImage imageNamed:@"play.png"]; // for previous iOS versions

利点は、Appleが新しいデバイスやディスプレイを作成した場合に、@3xまたはその他のバージョンを使用している場合にこれが機能することです。

イメージをロードする必要があるすべての場所でこれを回避するためのユーティリティメソッドを作成できます。

「高解像度画面のサポート」のセクション「アプリケーションへの画像の読み込み」を参照してください。

于 2010-09-27T14:27:38.383 に答える
4

この問題を引き起こす可能性のある2つのばかげた間違い(どちらも以前に犯したことがあります):

  1. 誤って大きなバージョンではなく小さなバージョンに@2xという名前を付ける
  2. 大きなバージョンをわずかに見落とす(1ピクセル)
于 2010-09-17T06:03:06.190 に答える
3

同じ問題が発生し、WindowsPhotoshopでエクスポートされた.pngファイルが.PNGファイルであることに気付きました。どうやらキャピタライゼーションは重要です。

また、タブバーアイテムでHi-Res@2x画像が取得されないことも参照してください。

于 2010-08-22T22:34:19.120 に答える
2

これは4.0デバイスの問題であることが確認できます。問題は、@ 2x画像が読み込まれないことではなく、実際に読み込まれますが、72 DPIで表示されます(ぼやける原因になります)。

このバグは幸いにも4.1で修正されています(エミュレータでテスト済み)。

于 2011-05-11T18:42:26.023 に答える
1

別のスレッドの誰かが、高解像度の画像を削除してプロジェクトに再度追加することで、同様の厄介な問題を解決できたと述べています。

于 2010-08-14T16:13:26.980 に答える
0

ファイル名が原因で同様の問題が発生しました-button_slice9.pngとbutton_slice9@2x.pngが機能しませんでした。

ただし、button_slice.pngとbutton_slice@2x.pngは、imageNamed:で期待どおりに機能します。

于 2012-01-26T11:41:15.813 に答える
0

私はちょうど理解するのに時間がかかった同様の問題を抱えていました。@ 2x画像がアプリのターゲットに追加されなかったため、パッケージ化されていなかったことがわかりました。

于 2012-03-15T17:50:58.140 に答える
0

低解像度のicon-close.pngを高解像度のicon-close@2x.pngに置き換えたときにも、同様の問題が発生しました。iPadビルドは「@2x」を無視しているようで、スケール=1.0の2倍のサイズで画像をロードしました。ファイルを削除して追加し直すことは役に立ちませんでした。名前を「icon-leave@2x.png」に変更しました。icon-close.pngについてどこかにキャッシュされたいくつかの悪い情報

于 2013-01-09T02:20:57.267 に答える