UINavigationViewControllerを入れ子にするとどうなるのか実験してみました。
結果としては Container View を一枚噛ませると概ねうまくいっているようです。逆に Container View を一枚噛ませないと、元の画面から引き継いでしまうらしくイマイチな動作になるようです。
実験結果のソースコードをGithubに置いておきました。
気まぐれ日誌 | 1997/07/07 より
UINavigationViewControllerを入れ子にするとどうなるのか実験してみました。
結果としては Container View を一枚噛ませると概ねうまくいっているようです。逆に Container View を一枚噛ませないと、元の画面から引き継いでしまうらしくイマイチな動作になるようです。
実験結果のソースコードをGithubに置いておきました。
普通っぽくないデジタルカメラ、OLYMPUS AIR A01を買いました。
レンズやアクセサリーを除いた本体はとても小さくてドアノブぐらいの大きさでしょうか。撮れる写真は、スマホ内蔵カメラとはレベルが違う、高級デジタル一眼クオリティです。ちなみに、マイクロSDカードとポケット三脚は用意しておいた方が幸せになれます。
さて、発売とほぼ同時に公開されたSDKを使って、普通のカメラ使用感レポートにはない、マニア臭のする変に細かいところを見ていきたいと思います。
前回からの続きです。今回が最終回です。
レイアウトエラーがなくなった状態で、編集画面の下に表示されているサイズクラスを「Any Width Any Height」と「Any Width Compact Height」の間で切り替えると、片方のサイズクラスにしか有効にならない制約がわかります。
これをシミュレーターで動かして画面を回転させるとそれぞれの配置で表示できているのが確認できると思います。
よく見ると実際のところ、デバイスの回転に合わせて部品が回転しながら配置されるのではなく、画面全体のサイズが変わってそれに合うように移動しているように、トランジションアニメーションしています。
デバイスが回転することとデバイスの表示サイズが変わことは別のことであって、Auto Layoutでは表示サイズの変更をサポートします、と主張しているように思えますね。Interface Builderだけでビューの座標変換行列も指定できるようになると色々と楽しそうですが、さすがにそれはまだ先でしょうか。
以上でした。
前回からの続きです。
縦置き用の制約と横置き用の制約が衝突しているので、それらを修正します。
ビュー階層が表示されている右上に赤いアイコンがあるのでそれをクリックすると、レイアウトエラーになった制約の一覧が表示されます。
AボタンのとCボタンの縦位置が赤いビューの中央に沿うのは、横置きでは不要なので、それぞれ実行されないようにします。(wAny hC を追加してInstalledのチェックを外します)
AボタンのとCボタンの横位置が赤いビューの左端と右端を基準にしているのは、横置きでは不要なので、それぞれ実行されないようにします。
赤いビューの高さ固定は、横置きでは不要なので、実行されないようにします。
青いビューの右端が親のビューに張り付くのは、横置きでは不要なので、実行されないようにします。
赤いビューの左端が親のビューに張り付くのは、横置きでは不要なので、実行されないようにします。
赤いビューの上端が青いビューに張り付くのは、横置きでは不要なので、実行されないようにします。
これで、すべての制約の衝突が解消され、レイアウトエラーがなくなりました。
最終回に続きます。
前回からの続きです。
次に、横置き用の画面を作ります。編集画面の下に表示されているサイズクラスが Any Width と Compact Height の組み合わせになるように選択しておきます。
画面の大部分を占める青い色のビューと小脇にある帯状の赤いビューを横置き用に再配置します。それぞれの大きさは、青いビューを520×400で、赤いビューを80×400にしました。
3つのボタンも横置き用に再配置します。Aボタンは下端、Bボタンは中央、Cボタンは上端です。ボタンの大きさは縦置きのままです。
次に、横置きの時にだけ使われる配置の制約を設定します。
青いビューは上端・下端・左端が親のビューに張り付きます。右端は赤のビューに張り付きます。縦置きの時と違うのは下端と右端の設定なので、その2つだけ制約を追加します。
赤いビューは上端・下端・右端が親のビューに張り付きます。幅はデバイスの画面サイズに関わらず固定です。縦置きの時と違うのは上端と幅の設定なので、その2つだけ制約を追加します。
ボタンは、横方向の位置は赤いビューの真ん中に揃えます。縦方向の位置は3つとも異なり、Aボタンは赤いビューの下端を基準、Bボタンは赤いビューの中央、Cボタンは赤いビューの上端を基準にします。いずれも、縦置きの時と違うところを制約として追加します。
横置き画面についてはここまでです。
この時点で、縦置き用の制約と横置き用の制約が衝突しているのでレイアウトエラーになっていると思います。
次回に続きます。
StoryboardでAuto Layoutを使って、縦置き(Portrate)と横置き(Landscape)で異なる配置の画面を作ってみます。プログラムのコードによる配置は使わずにInterface Builderの設定だけでやってみます。
iPhone 6 PlusやiPadのサイズを考慮しだすと個別の設定が複雑になるので、今回はiPhone 4SとiPhone 5のサイズのみでかつiOS 8をターゲットにします。
最初に、縦置き用の画面を作ります。編集画面の下に表示されているサイズクラスが Any Width と Any Height になっているのを確認しておきます。
画面の大部分を占める青い色のビューと小脇にある帯状の赤いビューを配置します。それぞれの大きさは、青いビューを600×520で、赤いビューを600×80にしました。
赤いビューの中にボタンを3つ配置します。Aボタンは左端、Bボタンは中央、Cボタンは右端で、ボタンの大きさは全て50×50にしました。
次に、配置の制約を設定します。
青いビューは上端・左端・右端が親のビューに張り付きます。下端は赤のビューに張り付きます。
赤いビューは下端・左端・右端が親のビューに張り付きます。高さはデバイスの画面サイズに関わらず固定です。
ボタンは、3つとも縦と横のサイズを固定にします。縦方向の位置は赤いビューの真ん中に揃えます。横方向の位置は3つとも異なり、Aボタンは赤いビューの左端を基準、Bボタンは赤いビューの中央、Cボタンは赤いビューの右端を基準にします。
縦置き画面についてはここまでです。
クラスサイズ Any での制約は、他のクラスサイズで制約が指定されていないときの保険です。今回のボタンの大きさのように、どのクラスサイズでも変わらないものについてはAnyに設定しておくのがよいと思います。
次回に続きます。
さて。「iPhoneと同じように、Androidのスマフォで、ネットへのHTTP接続は3G経由で行い、ローカルネットワークへのHTTP接続はWi-Fi経由で行う」ということがやりたい、いや、やりたかったポンコツな通信処理があったりして、そのソースコードにあまり手を入れずにAndroid 4.xに加えてAndroid 5.0をサポートできないだろうかと調査してみました。