StoryBoardとAutoLayout

  • StoryBoard
    • 画面設計と画面遷移
    • セグエ
  • AutoLayout

ドキュメント

AutoLayout

メモ:

  • WWDC 2012 Session 202, Introduction to Auto Layout for iOS and OS X

    • View階層に関係なく、見た目の任意のView間で制約をかけられる
      • View階層の共通の親がConstrainを持つ
    • 優先度が設定できる(デフォ 1000)
    • 35:23,コーディングで制約をASCIIアートで表現可能( H:[View1]-10-[View2] みたいに)
  • WWDC 2012 Session 228, Best Practices for Mastering Auto Layout

    • コードでViewを移行する
      • [view setTranslateAutoresizeMaskIntoConstrains:NO]
      • -(void)layoutSubviews { フレームサイズや位置の設定 }
    • デバッグ
      • IBは制約の矛盾や不足を自動で手当。手動コーディング時は、ログを見るなど。
      • [view hasAmbigousLayout]
      • [view exerciseAmbiguityInLayout]
      • [window visualizeconstrains:@[]]
      • [view constrainsAffectingLayoutForOrientation/Axis:…]
    • 矛盾する制約はサイズを0にする
      • foo.height = foo.width * 2
      • foo.width = foo.height * 3
      • この制約を満たす値は、0。Viewは表示されない。
    • アニメーション
      • CoreAnimation、Layout制約、いずれか。
      • Layout制約でアニメすると、制約を守ったまま、遷移する。
    • インターナショナル
      • 言語の向きに合わせて、制約の方向が自動切り替え
        • ボタンのテキストサイズとか、制約により自動で幅設定
        • 左から右に書く言語での制約なら、逆の向きに書く言語なら、左右対称で反転

更に進んだ話題:

  • Session 219 Advanced Collection Views and Building Custom Layouts

棚のような表示をするCollectionViewControllerのレイアウト部分をカスタムにすることで、円形に並んだ要素や、写真のフロー表示など、自在な表示をさせている。

AutoLayoutを使うべき?

現在のiOSの開発でのメリットは、

  1. iPhone5とiPhone4S以前の縦方向のサイズを、コードで区別する必要がなくなる
  2. 縦向きと横向きの画面を、レイアウトと制約ベースの設計にすると、楽かもしれない

適当なタイミングで切り替えてもいいのでは?程度。 ただし、Appleは、大きな切り替えが必要になるフレームワークを、それが必至になるハードウェアが出てくる前に、2年ほど先駆けて公開してくる。

おそらく来年、遅くても再来年には、AutoLayoutを使わないとやってられない、画面サイズの種類の多様化(縦方向サイズが3種類以上になる、あるいはベゼル部分までピクセルが拡張されて横幅比率が非整数なものが出る)、状態になるだろう。

ゲーム開発のように、OpenGLやCocos2dなどで、独自の画面設計をするものならば、使わない画面領域を黒色にしておくなどで、対応ができるだろう。

iOSのViewを使う通常アプリは、メインのViewの高さをAutoLayoutで可変にする手順を、テンプレ化して、使っていけばいいだろう。