BT

Masonryを使用したiOS Auto Layout

| 作者: Scott McKenzie フォローする 0 人のフォロワー , 翻訳者 吉田 英人 フォローする 0 人のフォロワー 投稿日 2014年2月18日. 推定読書時間: 3 分 |

原文(投稿日:2014/02/07)へのリンク

オープンソースプロジェクトMasonry目標は,Auto Layoutのコードをもっと簡潔で読みやすくすることだ。

Masonryは,XIBやStoryboardを必要としないエクスペリエンスを実現するために “Auto Layoutを適切なシンタックスでラップする,ライトウェイトなレイアウトフレームワーク” である。開発者のJonas Budelmann氏の主張によれば,AutoLayoutは強力である反面,そのコードは冗長で可読性の低いものになる傾向がある。

Masonryはドメイン固有言語(DSL, Domain Specific Language)である。制約の定義と更新,属性参照,プライオリティ設定,デバッグサポートといったAuto Layoutの持つすべての機能を,使いやすいメソッドとして提供する。

GitHubで公開されているサンプルコードは一般的な使用方法と同時に,Masonryのコードの簡潔さを示すようにデザインされている。

UIEdgeInsets padding = UIEdgeInsetsMake(10, 10, 10, 10);

[view1 mas_makeConstraints:^(MASConstraintMaker *make) {
   make.edges.equalTo(superview).with.insets(padding);
}];

Auto Layoutの中核にあるのは制約(constraint)である。これはUI要素間の関係を数学的に表現したもので,優先度(priority)としきい値(threshold)で管理されたサイズと相対的位置で構成されている。制約は付加的に設定されることで干渉が発生することや,制約が不十分なために曖昧さを生じることがあるが,いずれの場合も例外をスローさせることが可能だ。

ビューの参照を持つNSLayoutConstraintを生成して属性や関連性を設定すれば,Masonryを使用せずにプログラム的に制約を生成することもできる。AppleもVisual Format Languageという,関連性をテキストとして定義するDSLを提供している。

Auto Layoutは義務的や排他的なものではなく,“Springs and Struts”方式のアプローチは現在でも有効だ。“Springs and Struts”,すなわち自動サイズ変更マスクとは,親ビューの境界が変更されたときの応答方法を定義するものだ。

AppleはAuto Layoutの採用に関して,説得力のある理由を用意している。

  • “Springs and Struts”では画面の方向やスクリーンサイズの違い,動的コンテントのサポートなどのためにコードが必要。
  • iOS 7のDynamic Typeにより,ユーザがアプリのテキストサイズを好みに合わせて指定可能。
  • iOS 6とiOS 7の両方をサポートし,各要素のメトリック上の違いを吸収。

Auto Layoutにも基本的な問題がないとは言えない。Appleでは,一般的に使用されるUIScrollViewとAuto Layoutを併用するためのガイダンスを公開している。Matt Neuburg氏は“Auto Layoutがビュートランスフォームではうまく動作しない”理由に関して,説得力のある論証を行うとともに,その代用としてレイヤトランスフォームを多用するように推奨している。

Auto Layoutで作成するコードでは,Xcode 5で可能になったInterface Builderの拡張のメリットを享受することはできない。具体的にはAuto Layoutの問題を視覚的に解決する機能や,異なる方向,iOSバージョン,デバイスサイズの違いを確認するためのアシスタントエディタのプレビューモードなどだ。

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT