自分の記事からの転載です。
「Xcode 6 時代のマルチデバイス対応 ~Size Classとベクター画像~」を参考にしながら 6/6 Plus に最適化させようとしていたのですが、iOS 8 から追加された zoom/standard モードを iPhone Simulator でデバッグするにはどうすればいいのかを調べていてカオスってたのでメモ。
そもそも iPhone Simulator で zoom/standard モードの切り替えができないのがどうかと思うけど。。。
先にまとめだけいうと、zoom モードにした実機でするのが一番確実。
さて 6/6 Plus の解像度に対応しようとすると zoom/standard モードのサイズを考慮する必要があります。
サイズは 6 Plus の UIScreen の bounds です。
- zoom モード(375x667)
- standard モード(414x736)
- 解像度を対応させない(320x568)
6/6 Plus の解像度に対応させる方法
「Xcode 6 時代のマルチデバイス対応 ~Size Classとベクター画像~」より引用* Launch 画像を登録する * Launch Screen Fileを指定する
対応表
zoom/standard モードで解像度を対応している/いないかで [UIScreen mainScreen].bounds.size, [UIScreen mainScreen].scale, [UIScreen mainScreen].nativeBounds.size, [UIScreen mainScreen].nativeScale のそれぞれ値を取得してみました。iPhone 6 Plus
bounds | scale | nativeBounds | nativeScale | |
---|---|---|---|---|
zoom - 非対応 | 320x568 | 2.000000 | 921.60004x1635.8401 | 2.880000 |
zoom - 対応 | 375x667 | 3.000000 | 1080x1920.9601 | 2.880000 |
standard - 非対応 | 320x568 | 2.000000 | 834.78265x1481.7391 | 2.608696 |
standard - 対応 | 414x736 | 3.000000 | 1080x1920.0001 | 2.608696 |
iPhone 6 Plus Simulator
iPhone 6 Plus Simulator では standard モードのみ実行可能。bounds | scale | nativeBounds | nativeScale | |
---|---|---|---|---|
standard - 非対応 | 320x568 | 2.000000 | 960x1704 | 3.000000 |
standard - 対応 | 414x736 | 3.000000 | 1242x2208 | 3.000000 |
そこで zoom モードの解像度を再現するために Resizable Simulator を使えば可能なのでは?!と思いたって試してみました。
Resizable Simulator
起動後に w375 x h667 に変更して試してみました。bounds | scale | nativeBounds | nativeScale | |
---|---|---|---|---|
非対応 | 768x1024 | 2.000000 | 1536x2048 | 2.000000 |
対応 | 768x1024 | 2.000000 | 1536x2048 | 2.000000 |
Simulator のサイズは変わってるけど、UIScreen の bounds が。。。
おそらくバグだと思われるけど UIScreen でほしいサイズはは Resize した後のサイズなのに。。。
UIScreen の bounds を元にしてコード上で自分でレイアウトしている場合はこれだと再現できないですね。
まとめ
AutoLayout のレイアウト確認くらいだと Resizable Simulator で確認できる。 とはいえ scale が 2 になっているためおそらく @2x を使いそうなので、その辺りの動作確認は zoom モードにした実機で確認するのが一番確実だと思います。 自力でレイアウトしている場合は何も考えずに実機でやりましょう。あと Storyboard の preview も standasrd/zoom の切り替えはサポートしてないみたいですね。
何かいい方法があったりしたら教えてください。