はじめに
勉強会に参加したので備忘のため
内容はiOS開発のベース部分であるUIKit
について
UIView
UIViewの役割
- サイズを持ち、ツリー構造を表現できる
- 適切に配置することができる(AutoLayout)
- UIのイベントに反応できる
- アニメーションを記述できる
ツリー構造
Viewの中にViewを持つ、といった親子関係を作ることができる
親の変化に応じて子も変化する
Viewも様々な種類がある
ex) UIImageView / UILabel / UIButton / UITableView...
たくさんあるViewの中から用途に適したViewを選び出すことが重要
AutoLayout
ViewとViewとの関係性を定義しておき、アプリ実行時に動的にサイズ、位置が決まる機能
ツリー構造の子から順に計算される
親のViewは子のViewの制約を考慮して自分自身を決める
定義時に矛盾があった場合エラーを出してくれる
UIイベント
後述します
アニメーション
UIView.animate で動きを表現できる
UIViewController
UIViewControllerの役割
- 様々なViewを所有し、更新を行う
- 一般的に、Viewで起きるイベントを管理する開始点
- Viewのライフサイクルを管理する
- 遷移をコントロールする
####様々なViewを所有
ViewControllerは一つのRootViewを持つ
RootView配下のViewの参照を持つことができる
レイアウトの変更(端末の回転など)を元にViewを更新するのもViewController
####Viewのライフサイクル
ViewController配下にあるViewの表示に関するライフサイクルを管理する
- loadView
- Viewの要素自体を作る
- viewDidLoad
- Viewが読み込まれた後に呼ばれる = Viewがあることが保証されている
- Viewに対して初期的なデータを当てたりスタイルを当てたりする
- Rxであればここでバインディングすることが多い
- viewWillAppear
- Viewが表示されるタイミングで呼ばれる
- 他のViewControllerから戻ってくる際も呼ばれる
- 画面に表示されるタイミングで呼ばれると覚えておけば🙆
- viewDidAppear
- 遷移のアニメーションが完了したタイミングで呼ばれる
- 要素のアニメーションを開始したり、例えばチュートリアルのモーダルを出したり
- viewWillDisappear
- 他のViewControllerに遷移する際に呼ばれる
- viewDidDisappear
- 遷移が完了し完全に見えなくなった際に呼ばれる
- 動画再生を止めたり、アニメーションを止めたり、必要であればデータを保存したり等
ContainerViewController
- 複数のViewControllerのコンテンツを1つのユーザーインターフェイスに結合する手段
- 異なるView間のナビゲーションを容易にする
####例:NavigtationController
iOSでよく見る遷移をしてくれる(設定画面で使われてる)
やっていることは子のViewControllerのマネージメントとナビゲーションバーの変更だけ
子のViewControllerのライフサイクルも管理してくれる
NavigationのViewにはあまりアクセスできない
#UIApplication
- あらゆるイベントのハンドリングをする
- アプリケーションの状態(起動・終了)
- URLを開くユニバーサルリンク(ディープリンク)
- メモリ等のシステムの状態に関するイベント
- これらのイベントのをApplicationDelegateに伝える
#UIWindow
- 表示する先(UIScreen)と表示するもの(UIView)と、そして表示を管理するクラスを(UIViewController)をもっている
- ソフトウェアキーボードだったりモーダルアラートは別UIWindowとして表示している
#UIResponder
- UIViewやUIApplication等のスーパークラス
- UIView, UIViewController, UIWindow, UIApplication にイベントを感知する機能がある
- タッチやモーションを検知してイベントを発生させる
####たくさんの種類がサポートされている
- UITapGestureRecognizer
- UIPinchGestureRecognizer
- UIRotaionGestureRecgnizer
- UISwipeGestureRecognizer
- UIPanGestureRecognizer
- UIScreenEdgePanGestureRecognizer
- UILongPressGestureRecognizer
#参考資料
Human Interface Guidelines
View Controller Programming Guide for iOS
Auto Layoutガイド