SlideShare une entreprise Scribd logo
1  sur  68
Télécharger pour lire hors ligne
Developer Day
Auto Layout 道場
1
A-1
掛川 敦史, iPhone アプリケーションサービス事業部
クラスメソッド株式会社
Ⓒ Classmethod, Inc.
2015年03月29日
Agenda
• Auto Layout 概要
• Lesson 1
• 基本的な制約の使い方
• 高さが可変のセル
• Lesson 2
• 制約を工夫して使う
• パララックス効果
• Lesson 3
• 制約をコードから操作する
• アニメーション
2Ⓒ Classmethod, Inc.
Auto Layout 概要
3
Auto Layout
• 制約ベースのレイアウトシステム
• iOS SDK 6.0 (Xcode 4.0) より導入された
• Deployment Target 6.0 以上で利用可能
• Auto Layout が登場する前は、Autosizing を利用するか
Frame をコードで計算して設定してレイアウトを組んでいた
4Ⓒ Classmethod, Inc.
Auto Layout
Auto Layoutはアプリケーションのユーザインターフェ
イス(特に画面レイアウト)を作成するシステムで、要素
間の関係を数学的に記述することによりこれを行います。
この関係を、個々の要素に対する制約、あるいは要素間の
制約として定義します。
Auto Layoutを導入すれば、画面の大きさや向き、地域
設定(言語など)の違いに応じて動的に変化する、汎用的
な画面レイアウトを作り出すことができます。
5Ⓒ Classmethod, Inc.
Auto Layout ガイドより引用
制約
6
Auto Layout
Auto Layoutはアプリケーションのユーザインターフェ
イス(特に画面レイアウト)を作成するシステムで、要素
間の関係を数学的に記述することによりこれを行います。
この関係を、個々の要素に対する制約、あるいは要素間の
制約として定義します。
Auto Layoutを導入すれば、画面の大きさや向き、地域
設定(言語など)の違いに応じて動的に変化する、汎用的
な画面レイアウトを作り出すことができます。
7Ⓒ Classmethod, Inc.
Auto Layout ガイドより引用
制約 (Constraint)
• レイアウトを決定するためのルール
• 実行時には NSLayoutConstraint というクラスのインスタ
ンスでルールが表現されている
• 主に他の UI コンポーネントとの相対的な位置・サイ
ズを定義
• 親ビューもしくは兄弟ビューとの間のルールを定義
• 他の UI コンポーネントからの相対位置
• 他の UI コンポーネントを基準とした自身のサイズ
• 自身のサイズ
8Ⓒ Classmethod, Inc.
制約 (Constraint)
• 制約を定義する方法は2通り
• Storyboard や Xib などの Interface Builder 上
• コード
• 制約は必ずしも厳密である必要はない
• 「幅が 20 pt 以上」といった制約を定義することも可能
• 複数の制約が競合する場合には、優先順位が高い方が適用さ
れる
9Ⓒ Classmethod, Inc.
Auto Layout
Auto Layoutはアプリケーションのユーザインターフェ
イス(特に画面レイアウト)を作成するシステムで、要素
間の関係を数学的に記述することによりこれを行います。
この関係を、個々の要素に対する制約、あるいは要素間の
制約として定義します。
Auto Layoutを導入すれば、画面の大きさや向き、地域
設定(言語など)の違いに応じて動的に変化する、汎用的
な画面レイアウトを作り出すことができます。
10Ⓒ Classmethod, Inc.
Auto Layout ガイドより引用
要素間の関係を数学的に記述
11Ⓒ Classmethod, Inc.
attribute1 ==
multiplier attribute2 + constant
NSLayoutConstraint Class Reference では、Auto
Layout における UI コンポーネント間の関係は下記の
式で表されると記述されている
例: ボタンを基準にラベルの位置を決める
12Ⓒ Classmethod, Inc.
ラベルはボタンの
20pt 右に配置
例: ボタンを基準にラベルの位置を決める
13Ⓒ Classmethod, Inc.
ラベルの左端のX座標 =
1.0 ボタンの右端のX座標
+ 20
ラベルはボタンの
20pt 右に配置
例: ボタンを基準にラベルの位置を決める
14Ⓒ Classmethod, Inc.
ラベルの左端のX座標 =
1.0 ボタンの右端のX座標
+ 20
これが制約
動的に変化するレイアウト
15
Auto Layout
Auto Layoutはアプリケーションのユーザインターフェ
イス(特に画面レイアウト)を作成するシステムで、要素
間の関係を数学的に記述することによりこれを行います。
この関係を、個々の要素に対する制約、あるいは要素間の
制約として定義します。
Auto Layoutを導入すれば、画面の大きさや向き、地域
設定(言語など)の違いに応じて動的に変化する、汎用的
な画面レイアウトを作り出すことができます。
16Ⓒ Classmethod, Inc.
Auto Layout ガイドより引用
iPhone 5 発表以前のレイアウト
• 端末の画面サイズは 3.5 inch のみだった
• タブレットを除く
• レイアウトのバリエーション
• せいぜい Portrait と Landscape の違い程度
• Autosizing + Frame 計算で、絶対座標でレイアウトしても
特に問題なし
17Ⓒ Classmethod, Inc.
3.5 inch
320 x 480
単位: pt
現在のレイアウト
• 端末の画面サイズは 3.5, 4, 4.7, 5.5 inch の4種類
• タブレットを除く
• レイアウトのバリエーション
• 端末によって画面の幅も高さも異なる
• Autosizing + Frame 計算でも対応できるけど、きちんと画
面サイズを計算に組み込む必要あり
• レイアウト処理の記述が煩雑になってきた
18Ⓒ Classmethod, Inc.
3.5 inch
320 x 480
4 inch
320 x 568
4.7 inch
375 x 667
5.5 inch
414 x 736
単位: pt
Auto Layout を利用した場合
• 様々な画面サイズに対応して変化するレイアウトを宣
言的に定義することができる
• 例:画面いっぱいに表示される親ビューに対して、上下左右
16pt のマージンを取ってビューを配置
• ビューの幅・高さは画面サイズに応じて自動的に計算される
• iOS 8 から追加された Size Class にも対応
• Size Class 毎に制約を設定することも可能
• 今回は Size Class についての説明は割愛します
19Ⓒ Classmethod, Inc.
Leading & Trailing
20
Leading & Trailing
• 文字を記述する方向がことなる言語圏向けにレイアウ
トをローカライズするために必要となる概念
• 文頭が右側である言語圏向けに、レイアウトが左右反転した
UI を提供することが可能
21Ⓒ Classmethod, Inc.
Leading & Trailing
• Leading
• 文字列の先頭側
• 日本語や英語など、多くの言語圏では左側
• Trailing
• 文字列の末尾側
• 多くの言語圏では右側
22Ⓒ Classmethod, Inc.
Leading & Trailing
23Ⓒ Classmethod, Inc.
英語 アラビア語
制約の種類
24
制約の種類
• 制約は3種類に分類できる
• アライメントに関する制約
• 相対位置に関する制約
• サイズに関する制約
25Ⓒ Classmethod, Inc.
アライメントに関する制約
• Leading (Left or Right) Alignment
• Trailing (Right or Left) Alignment
• Top Alignment
• Bottom Alignment
• Center X Alignment
• Center Y Alignment
• Baseline Alignment
26Ⓒ Classmethod, Inc.
アライメントに関する制約
27Ⓒ Classmethod, Inc.
Leading Alignment Center X Alignment
左 え 中央 え
相対位置に関する制約
• Horizontal Space
• Vertical Space
28Ⓒ Classmethod, Inc.
相対位置に関する制約
29Ⓒ Classmethod, Inc.
Horizontal Space
コンポーネント間のスペース
サイズに関する制約
• Width
• Height
• Equal Widths
• Equal Heights
30Ⓒ Classmethod, Inc.
サイズに関する制約
31Ⓒ Classmethod, Inc.
Equal Width
幅が等しい
Lesson 1
32
高さ可変のセル
33Ⓒ Classmethod, Inc.
デモ
34
作ってみよう
35
実装すること
1. 適切に制約を配置する
2. セルの高さを指定する
36Ⓒ Classmethod, Inc.
1. 適切に制約を配置する
37Ⓒ Classmethod, Inc.
• ContentView - Label 間 の制約
• Label - Label 間 の制約
2. セルの高さを指定する (iOS 8)
• セルの高さとして
UITableViewAutomaticDimension を指定する
38Ⓒ Classmethod, Inc.
- (CGFloat)tableView:(UITableView *)tableView
heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return UITableViewAutomaticDimension;
}
2. セルの高さを指定する (iOS 7)
• UITableViewAutomaticDimension は使用不可
• サイズ計測用のセルを使用して高さを計算する
39Ⓒ Classmethod, Inc.
Lesson 2
40
パララックス
41Ⓒ Classmethod, Inc.
上にスクロール
デモ
42
パララックス
43Ⓒ Classmethod, Inc.
http://blog.domesticcat.com.au/ios/2014/03/19/creating-parallax-
effect-on-uiscrollview-using-simple-constraints/
作ってみよう
44
スクロール時の動きの実現方法
• イメージビューの高さがスクロールに合わせて変化す
る
• contentMode
• Aspect Fill (UIViewContentModeScaleAspectFill)
45Ⓒ Classmethod, Inc.
これらの組み合わせで、あたかもイメージビューが
ビューの下にもぐっていくように見せている
イメージビューのサイズ
46Ⓒ Classmethod, Inc.
contentOffset.y == 0 contentOffset.y >= 0
UIImageView の
Frame
UIImageView の
Frame
イメージビューのサイズ
47Ⓒ Classmethod, Inc.
contentOffset.y == 0 contentOffset.y >= 0
UIImageView の
Frame
UIImageView の
Frameナビゲーションバーの下端にぴったり
くっついた状態で、イメージビューの
高さが小さくなっていく
イメージビューのサイズ
48Ⓒ Classmethod, Inc.
contentOffset.y == 0 contentOffset.y <= 0
UIImageView の
Frame UIImageView の
Frame
イメージビューのサイズ
49Ⓒ Classmethod, Inc.
contentOffset.y == 0 contentOffset.y <= 0
UIImageView の
Frame UIImageView の
Frame
ナビゲーションバーの下端にぴったり
くっついた状態で、イメージビューの
高さが大きくなっていく
Aspect Fill
50Ⓒ Classmethod, Inc.
contentOffset.y == 0 contentOffset.y >= 0
実画像サイズ
実画像サイズ
Aspect Fill
51Ⓒ Classmethod, Inc.
contentOffset.y == 0 contentOffset.y >= 0
実画像サイズ
実画像サイズ
イメージビューの高さが小さくなると、
画像のスケールはそのままに画像の中
央部分が表示され続ける
Aspect Fill
52Ⓒ Classmethod, Inc.
contentOffset.y == 0 contentOffset.y <= 0
実画像サイズ
実画像サイズ
Aspect Fill
53Ⓒ Classmethod, Inc.
contentOffset.y == 0 contentOffset.y <= 0
実画像サイズ
実画像サイズ
イメージビューの高さが大きくなると、
画像のスケールも大きくなって画像が
伸びたように見える
ポイント
• イメージビューと Top Layout Guide の間 を 0pt にする
制約は Priority を 999 以下に設定する
• スクロール時に灰色のビューがナビゲーションバーの下にもぐりこむ
とイメージビューが押し上げられて、上記の制約を満たさない状態に
なってしまう
• Priority が 1000 だと実行時コンソールにエラーが出力さ
れてしまうが、999 にすればエラーが出力されない
• Priority が 1000 の場合、その制約は必ず守られなければならない
(Required) という意味になる
• Priority が 999 であれば必須ではなくなるので、制約は出来る限り
守られることになる
54Ⓒ Classmethod, Inc.
ポイント
• 画像サイズはイメージビューの初期サイズとアスペク
ト比を合わせるといい感じになる
• 画面サイズによって初期サイズのアスペクト比が異なる場合、
十分な大きさを持った正方形にしておくといい
55Ⓒ Classmethod, Inc.
Lesson 3
56
デモ
57
作ってみよう
58
初期状態
59Ⓒ Classmethod, Inc.
初期状態
60Ⓒ Classmethod, Inc.
メニューの幅の分だけTrailing Space
をマイナスする。
Viewを画面の外に配置することで非表
示にしている。
メニュー展開状態
61Ⓒ Classmethod, Inc.
メニュー展開状態
62Ⓒ Classmethod, Inc.
Trailing Space = 0 にすることでメ
ニューの右端と画面の右端が う。
メニュー展開状態
63Ⓒ Classmethod, Inc.
Trailing Space = 0 にすることでメ
ニューの右端と画面の右端が う。
この過程をアニメーションしたい!
制約はOutletで接続できる
64Ⓒ Classmethod, Inc.
Type: NSLayoutConstraint
制約の変更をアニメーションする
• 制約の値を変更する
• NSLayoutConstraint のプロパティ constant に値を代入する
• Outlet で接続した制約の値をコード上で変更することで画面の
表示を動的に変化させることが可能
• アニメーションさせるには
• 制約の値を変更したあとに明示的に layoutIfNeeded を呼ぶ
必要がある
• アニメーションの Blocks 内で layoutIfNeeded を呼ぶこと
でアニメーションを実現する
65Ⓒ Classmethod, Inc.
ポイント
• 制約のOutlet接続
• 制約を Outlet で接続することで、動的に制約の値を変更す
ることが可能になる
• layoutIfNeeded
• 通常のアニメーションのように記述してしまうと制約の更新
はアニメーションしない
• NSLayoutConstraint の constant に値を代入した場合、即
座に layoutSubViews が呼ばれるわけではない
• View の更新をアニメーションするという意味でアニメー
ションのBlocks 内に layoutIfNeeded を記述する
66Ⓒ Classmethod, Inc.
まとめ
• Auto Layout はとっつきづらいけど、慣れるとそん
なに難しくない
• 複雑・動的なレイアウトにも対応できる
• 制約を工夫して付ける
• 制約をコードから操作する
• とはいえ限界もあるので、Frame とうまく使い分けることも
必要
67Ⓒ Classmethod, Inc.
Developer Day
ご静聴ありがとうございました。
スライドは後日ブログで公開します。
68
A-1
Ⓒ Classmethod, Inc.
#cmdevio2015

Contenu connexe

Similaire à DevIO Auto Layout 道場スライド

プログラマとデザイナが共有すべきUIに関するAndroidの10の機能
プログラマとデザイナが共有すべきUIに関するAndroidの10の機能プログラマとデザイナが共有すべきUIに関するAndroidの10の機能
プログラマとデザイナが共有すべきUIに関するAndroidの10の機能youten (ようてん)
 
Windows Phone 8 アプリ開発 03.構築
Windows Phone 8 アプリ開発 03.構築Windows Phone 8 アプリ開発 03.構築
Windows Phone 8 アプリ開発 03.構築Akira Hatsune
 
マルチスクリーン対応と最近のアプリの傾向
マルチスクリーン対応と最近のアプリの傾向マルチスクリーン対応と最近のアプリの傾向
マルチスクリーン対応と最近のアプリの傾向Yuki Anzai
 
Pull request時の画面差分取得の自動化
Pull request時の画面差分取得の自動化Pull request時の画面差分取得の自動化
Pull request時の画面差分取得の自動化Shunsuke Maeda
 
第6回中心会議 XAMLで学ぶ レイアウトスキル 0923
第6回中心会議 XAMLで学ぶ レイアウトスキル 0923第6回中心会議 XAMLで学ぶ レイアウトスキル 0923
第6回中心会議 XAMLで学ぶ レイアウトスキル 0923Hub DotnetDeveloper
 
(デ部発表用抜粋版)プログラマとデザイナが共有すべきUIに関するAndroidの10の機能
(デ部発表用抜粋版)プログラマとデザイナが共有すべきUIに関するAndroidの10の機能(デ部発表用抜粋版)プログラマとデザイナが共有すべきUIに関するAndroidの10の機能
(デ部発表用抜粋版)プログラマとデザイナが共有すべきUIに関するAndroidの10の機能youten (ようてん)
 
レスポンシブWebデザインによる開発効率化
レスポンシブWebデザインによる開発効率化レスポンシブWebデザインによる開発効率化
レスポンシブWebデザインによる開発効率化亮 門屋
 
[CTO Night & Day 2019] ML services: MLOps #ctonight
[CTO Night & Day 2019] ML services: MLOps #ctonight[CTO Night & Day 2019] ML services: MLOps #ctonight
[CTO Night & Day 2019] ML services: MLOps #ctonightAmazon Web Services Japan
 
iOS 9 Bootcamp #6 UIKit
iOS 9 Bootcamp #6 UIKitiOS 9 Bootcamp #6 UIKit
iOS 9 Bootcamp #6 UIKitShingo Hiraya
 
はじめよう FinOps クラウドコスト最適化への第一歩とは 日本IBMカスタマーサクセスチーム
はじめよう FinOps クラウドコスト最適化への第一歩とは 日本IBMカスタマーサクセスチームはじめよう FinOps クラウドコスト最適化への第一歩とは 日本IBMカスタマーサクセスチーム
はじめよう FinOps クラウドコスト最適化への第一歩とは 日本IBMカスタマーサクセスチーム勇 黒沢
 
Internet Explorer 9 の新機能「固定サイト」 (Pinned sites)
Internet Explorer 9 の新機能「固定サイト」 (Pinned sites)Internet Explorer 9 の新機能「固定サイト」 (Pinned sites)
Internet Explorer 9 の新機能「固定サイト」 (Pinned sites)shigeya
 
AZAREA-Cluster (Hadoop Conference Japan 2013 Winter Demo Image)
AZAREA-Cluster (Hadoop Conference Japan 2013 Winter Demo Image) AZAREA-Cluster (Hadoop Conference Japan 2013 Winter Demo Image)
AZAREA-Cluster (Hadoop Conference Japan 2013 Winter Demo Image) AzareaCluster
 
Intalio japan special cloud workshop
Intalio japan special cloud workshopIntalio japan special cloud workshop
Intalio japan special cloud workshopDaisuke Sugai
 
マークアップ講座 03 スマートフォン・デバイス最適化
マークアップ講座 03 スマートフォン・デバイス最適化マークアップ講座 03 スマートフォン・デバイス最適化
マークアップ講座 03 スマートフォン・デバイス最適化eiji sekiya
 
eZ Publish 2012年4月勉強会 - eZ Publish設計ベストプラクティス
eZ Publish 2012年4月勉強会 - eZ Publish設計ベストプラクティスeZ Publish 2012年4月勉強会 - eZ Publish設計ベストプラクティス
eZ Publish 2012年4月勉強会 - eZ Publish設計ベストプラクティスericsagnes
 
レスポンシブイメージとWordPressで扱われるイメージサイズ
レスポンシブイメージとWordPressで扱われるイメージサイズレスポンシブイメージとWordPressで扱われるイメージサイズ
レスポンシブイメージとWordPressで扱われるイメージサイズAkiko Kasaya
 
MTセミナー2011/2/21 アイデアマンズ株式会社
MTセミナー2011/2/21 アイデアマンズ株式会社MTセミナー2011/2/21 アイデアマンズ株式会社
MTセミナー2011/2/21 アイデアマンズ株式会社Kunihiko Miyanaga
 
QGISセミナー・中級編 Ver. 2.4版
QGISセミナー・中級編 Ver. 2.4版QGISセミナー・中級編 Ver. 2.4版
QGISセミナー・中級編 Ver. 2.4版FOSS4G_MEXT
 
QGISセミナー中級編(V2.4)
QGISセミナー中級編(V2.4)QGISセミナー中級編(V2.4)
QGISセミナー中級編(V2.4)IWASAKI NOBUSUKE
 

Similaire à DevIO Auto Layout 道場スライド (20)

プログラマとデザイナが共有すべきUIに関するAndroidの10の機能
プログラマとデザイナが共有すべきUIに関するAndroidの10の機能プログラマとデザイナが共有すべきUIに関するAndroidの10の機能
プログラマとデザイナが共有すべきUIに関するAndroidの10の機能
 
Windows Phone 8 アプリ開発 03.構築
Windows Phone 8 アプリ開発 03.構築Windows Phone 8 アプリ開発 03.構築
Windows Phone 8 アプリ開発 03.構築
 
マルチスクリーン対応と最近のアプリの傾向
マルチスクリーン対応と最近のアプリの傾向マルチスクリーン対応と最近のアプリの傾向
マルチスクリーン対応と最近のアプリの傾向
 
Pull request時の画面差分取得の自動化
Pull request時の画面差分取得の自動化Pull request時の画面差分取得の自動化
Pull request時の画面差分取得の自動化
 
第6回中心会議 XAMLで学ぶ レイアウトスキル 0923
第6回中心会議 XAMLで学ぶ レイアウトスキル 0923第6回中心会議 XAMLで学ぶ レイアウトスキル 0923
第6回中心会議 XAMLで学ぶ レイアウトスキル 0923
 
(デ部発表用抜粋版)プログラマとデザイナが共有すべきUIに関するAndroidの10の機能
(デ部発表用抜粋版)プログラマとデザイナが共有すべきUIに関するAndroidの10の機能(デ部発表用抜粋版)プログラマとデザイナが共有すべきUIに関するAndroidの10の機能
(デ部発表用抜粋版)プログラマとデザイナが共有すべきUIに関するAndroidの10の機能
 
レスポンシブWebデザインによる開発効率化
レスポンシブWebデザインによる開発効率化レスポンシブWebデザインによる開発効率化
レスポンシブWebデザインによる開発効率化
 
[CTO Night & Day 2019] ML services: MLOps #ctonight
[CTO Night & Day 2019] ML services: MLOps #ctonight[CTO Night & Day 2019] ML services: MLOps #ctonight
[CTO Night & Day 2019] ML services: MLOps #ctonight
 
iOS 9 Bootcamp #6 UIKit
iOS 9 Bootcamp #6 UIKitiOS 9 Bootcamp #6 UIKit
iOS 9 Bootcamp #6 UIKit
 
はじめよう FinOps クラウドコスト最適化への第一歩とは 日本IBMカスタマーサクセスチーム
はじめよう FinOps クラウドコスト最適化への第一歩とは 日本IBMカスタマーサクセスチームはじめよう FinOps クラウドコスト最適化への第一歩とは 日本IBMカスタマーサクセスチーム
はじめよう FinOps クラウドコスト最適化への第一歩とは 日本IBMカスタマーサクセスチーム
 
Internet Explorer 9 の新機能「固定サイト」 (Pinned sites)
Internet Explorer 9 の新機能「固定サイト」 (Pinned sites)Internet Explorer 9 の新機能「固定サイト」 (Pinned sites)
Internet Explorer 9 の新機能「固定サイト」 (Pinned sites)
 
AZAREA-Cluster (Hadoop Conference Japan 2013 Winter Demo Image)
AZAREA-Cluster (Hadoop Conference Japan 2013 Winter Demo Image) AZAREA-Cluster (Hadoop Conference Japan 2013 Winter Demo Image)
AZAREA-Cluster (Hadoop Conference Japan 2013 Winter Demo Image)
 
Intalio japan special cloud workshop
Intalio japan special cloud workshopIntalio japan special cloud workshop
Intalio japan special cloud workshop
 
マークアップ講座 03 スマートフォン・デバイス最適化
マークアップ講座 03 スマートフォン・デバイス最適化マークアップ講座 03 スマートフォン・デバイス最適化
マークアップ講座 03 スマートフォン・デバイス最適化
 
eZ Publish 2012年4月勉強会 - eZ Publish設計ベストプラクティス
eZ Publish 2012年4月勉強会 - eZ Publish設計ベストプラクティスeZ Publish 2012年4月勉強会 - eZ Publish設計ベストプラクティス
eZ Publish 2012年4月勉強会 - eZ Publish設計ベストプラクティス
 
レスポンシブイメージとWordPressで扱われるイメージサイズ
レスポンシブイメージとWordPressで扱われるイメージサイズレスポンシブイメージとWordPressで扱われるイメージサイズ
レスポンシブイメージとWordPressで扱われるイメージサイズ
 
MTセミナー2011/2/21 アイデアマンズ株式会社
MTセミナー2011/2/21 アイデアマンズ株式会社MTセミナー2011/2/21 アイデアマンズ株式会社
MTセミナー2011/2/21 アイデアマンズ株式会社
 
Exp int toc
Exp int tocExp int toc
Exp int toc
 
QGISセミナー・中級編 Ver. 2.4版
QGISセミナー・中級編 Ver. 2.4版QGISセミナー・中級編 Ver. 2.4版
QGISセミナー・中級編 Ver. 2.4版
 
QGISセミナー中級編(V2.4)
QGISセミナー中級編(V2.4)QGISセミナー中級編(V2.4)
QGISセミナー中級編(V2.4)
 

DevIO Auto Layout 道場スライド