2012-03-29 10 views
0

UIViewに2つのUIImagesを配置して積み重ねる必要があることがよくあります。 たとえば、写真フレームを写真の周りに置いてから表示します。ハードコーディングされたフレームの値が拡大縮小されないため、画像のフレームを変更して位置を指定することは、Retinaと非網膜の両方のデバイスでは機能しません。網膜と網膜との互換性がないUIImageのスタッキングと位置付け

たとえば、画像が56x56 (retina)、実際の画像が52x52 (retina)のフォトフレームを持っている場合は、フォトフレームの上部にCGRectMake(2, 2, 54, 54)に配置する必要があります。しかし、ユーザーが網膜でない場合、これらの値は正しくないので失敗します(現在はCGRectMake(1, 1, 27, 27)です)。

解決方法安全な画像処理の正しい方法は何ですか?どちらの画面タイプでも正しく表示される2つの画像(通常の画像と@2x.pngs)を組み合わせる方法はありますか?

答えて

1

UIScreenスケールプロパティを使用できます。これは読み取り専用のプロパティです。 iPhone 4(非網膜ディスプレイ)より前のデバイスでは、この値は1.0になりますが、網膜ディスプレイでは2.0です。したがって、このプロパティをローカル変数、たとえばCGFloat scaleFactorに格納して、上記の値を掛けることができます。

CGFloat scaleFactor=[[UIScreen mainscreen] scale]; 
... = CGRectMake(1.0*scalefactor,1.0*scaleFactor,27.0*scaleFactor,27.0*scaleFactor); 
+0

素晴らしいです。これはイメージを操作するのに好ましい方法ですか?より高度な画像操作を始める場合、これはまだ適用されますか?画像バッファの内容を必要な両方の画像バージョンに変換し、フレームワークに表示するファイルの選択を処理させる方法がありますか?filename.pngと[email protected]がありますか? –

+0

このプラクティスはWWDC2011 ScrollViewのものです。 Appleのエンジニア自身が推奨しているように、イメージの内容を変換することについて実際にはわかっていませんが、この習慣が好ましい方法であると確信しています。 –

関連する問題