この質問 に投稿されたサンプルログでは、結果は同じです。 2つの間に論理的な違いがあることが意図されているかどうか誰かが知っていますか?
Appleの説明 でもわかりにくい。 scale
の説明は次のとおりです:
画面に関連付けられたnaturalスケール係数...この値は、デフォルトの論理座標空間からデバイス座標空間に変換するために必要なスケール係数を反映しますこの画面...
これが nativeScale
の説明です:
物理画面のnative倍率
naturalとnativeの違いは何ですか?
ScaleとnativeScaleは、ポイントが対応するピクセル数を示します。ただし、ポイントは ピクセルの中間バッファー にレンダリングされ、画面の解像度に合わせてサイズが変更されることに注意してください。したがって、「1 ptは何ピクセルに対応するのか」と尋ねると、中間ピクセル(スケール)または最終ピクセル(nativeScale)を意味する場合があります。
IPhone Plusでは、スケールは3ですが、nativeScaleは2.6です。これは、コンテンツが3倍(1ポイント= 3ピクセル)でレンダリングされるが、結果のビットマップが縮小され、1ポイント= 2.6ピクセルになるためです。
したがって、スケールは中間ビットマップを扱い、nativeScaleは最終ビットマップを扱います。
これは表示ズームなしです。表示ズームを有効にしても、中間バッファは1ポイント= 3ピクセルでレンダリングされるため、スケールは3のままです。ただし、ネイティブスケールは2.8になります。
したがって、物理画面を確認する場合は、スケールを使用します。たとえば、iPhone Plusでのみ実行されるアプリがある場合、次のようにできます。
if scale != 3 {
print("Not supported")
}
ない:
if nativeScale != 2.6 {
print("Not supported")
}
2番目のコードフラグメントは、ユーザーがディスプレイズームを有効にしたときに期待されたものを実行できません。
nativeBounds
およびnativeScale
プロパティは、主にOpenGLで使用するためのものであり、実際のピクセルサイズと、画面の解像度に正確に描画するために使用するポイントツーピクセルスケーリング係数を表します。仮想の1242×2208サイズで描画する場合の追加のレンダリングコストを回避できます。たとえば、CAEAGLLayerでは、次のようにします。
theGLLayer.contentsScale = [UIScreen mainScreen].nativeScale;
…そして、コンテンツをnativeBounds
のサイズ、つまり1080×1920でレンダリングするだけです。
その質問のサンプルログはシミュレータからのものであり、シミュレータは常に実際のデバイスと同じように動作することが保証されていません。