AutoLayout入門を読んだ
https://github.com/mixi-inc/iOSTraining/wiki/Auto-Layout%E5%85%A5%E9%96%80
読みました。
- パーツのリサイズには、AutoLayoutとAuto Resizing(springand struts)があります
- AutoLayoutは比較的新しいトピックで、iOS6や OS X 10.6以降で利用できる(iOS5.xでは実行時エラー)
- Auto Resizingをぐぐった結果、よくわからないままにhttps://developer.apple.com/library/ios/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/WindowsandViews/WindowsandViews.html#//apple_ref/doc/uid/TP40009503-CH2-SW9に行き着き
- iOSの画面はCore Animation layersという長方形のレイヤーが重なっているような感じで管理されている事
- Buttonなどは本当はそのレイヤーの上にのっている何かで直接レイヤーではない事
- Core Animation layersの描画のコードはパフォーマンスのためにキャッシュされ使い回される事
- UIViewクラスはそのCore Animation layersのクラスを叩くインターフェイスっぽい事
in conjunction with ~
が~と関連しながら
っぽい事If the subview is partially transparent, the content from the two views is blended together prior to being displayed on the screen.
subviewの動きがsuperviewからみて透明性があるなら、2つのビューの内容は表示されるよりもブレンドされているだろう?- subviewの設定をきちんと行う事でsuperviewのサイズが変わった時のsubviewの見た目の変化の挙動も制限できる
- superviewが透明になったり、隠されたりした時の挙動もしかり
- ということが、分かりまして、いや、そういうことじゃないから、と思って別のところへ飛んで
- Handling Layout Changes Automatically Using Autoresizing Rules の部分がそれっぽかったです。
- UIViewAutoresizing...で始まる定数群を設定することで親Viewとの相対位置などが決定でき、これらは、Autoresizing mask constantsとよばれているみたいです
- でも、時代遅れと言われている向きもあるようです http://qiita.com/kenmaz/items/7740336c97fe6298901b
- iOSの画面はCore Animation layersという長方形のレイヤーが重なっているような感じで管理されている事
- 記述力が高いらしいAutoLayoutでできること
- Pin
- 親ビューの上や左から何ポイント離すか、兄弟Viewとの間隔、あるいはviewの幅や高さを指定できます
- Align
- Interface Builder で設定しているときのように、隣り合うビューとviewの端を揃える指定ができます
- Pin
- AutoLayoutをXcode上で設定するには、 Interface Builder上と、メニューバーから可能
- Interface Builder上からはStoryboardを開いてUIViewを選択しているとき、右下のアイコンが三つ並んでいるメニューから
- メニューバーからStoryboardを開いてUIViewを選択しているとき、Editor > Pin (Editor > Alignなどもある)から
- 設定した制約はInterface BuilderのDocument Outlineから確認できるそうです
- 単体にかかってくる制約(そのコンポーネントのwidthなど)はView直下に
- trailing spaceなどView全体にかかってくる制約はConstraints以下に追加されています
- ユーザが設定した制約は青、Interface Builderが補完した制約は紫
- Xcode6からstoryboardに配置したAutolayoutを各画面サイズで確認できるプレビュー機能がつきました
- 画面を分割してAssistant Editorの上部メニューのPreview > storyboardから表示
- 制約の優先度は、 ボタンの最大幅(最大値を不等号使用して表す) > ボタンと親ビューのtrailing spaceを設定(最小値を不等号で表す) > ボタンの幅を統合で設定(=で表す)
- UILabelの行数(Lines)を0にすると最大行が無限となり、UILabelのラベルの変数の長さに合わせてUILabelが伸びます
- Auto Layoutを使う時は一度配置した後にレイアウトを変更したときにその変更が反映されない、などの注意点があります
- 下位置を揃えているボタンがいくつかあって、そのうちの1つをアニメーションさせたとしても、他のボタンがつられてアニメーションするわけではないです