Tasakiです。
前日と気温差10℃なんて日もめずらしくないこの頃、みなさんいかがお過ごしでしょうか。
久しぶりとなりましたが、今回は意外と厄介な問題のあるRetinaディスプレイ対応についてです。
公式ドキュメントにも記載されていますが、
アプリケーションにバンドルする画像は、
例えば通常解像度の画像 image.png があった場合、
image@2x.png という縦横倍精度の画像を準備し、
UIImage* image = [ UIImage imageNamed: @"image" ];
とすると、iPhone3G では、image.png が
iPhone4 では、image@2x.png が読み込まれるというのは、
ご存知の方がほとんどだと思います。
ただ、このメソッドではアプリケーションバンドルに含まれた画像でなければ
参照できないのが欠点です。
そこで、以下のメソッドを代わりに使用することで
フルパスを指定して上記と同様の結果を得ることができます。
- ( id ) initWithContentsOfFile:( NSString* ) path
+ ( id ) imageWithContentsOfFile:( NSString* ) path
これらは、4.0公開時点では上手く行かないようでしたが、
最新版では公式ドキュメントの記述通りの動きをします。
ここで、path には、単精度画像のパスを指定します。
すると倍精度画像が同一ディレクトリに存在すれば、
そちらが読み込まれるようになります。
現在の画像オブジェクトが倍精度画像として読み込まれているか調べるには、
scaleプロパティを使用します。
単精度画像なら1.0
倍精度画像なら2.0が値として取得できると思います。
1点注意が必要なのは、
sizeプロパティは単精度と倍精度で同じ値になることです。
元の画像サイズ = size * scale
という図式が成り立ちます。
ここまでは、まあ問題ないかと。
これを踏まえて次回は、
単精度画像を倍精度画像として使用する例をご紹介します。
そんな必要があるのかって?
そこそこあるんですね。そういう場合が。
- 関連記事
-
スポンサーサイト
trackbackURL:http://appteam.blog114.fc2.com/tb.php/163-b0291485