iOSアプリ開発で【知ったこと】をつらつら追記していく 〜その2〜
【画面遷移(Segue)設定方法2種類】
画面遷移はSegueを使えばいい。
■画面上から
・比較的観点に実装可能。
■コードで実現
・任意のタイミングで遷移させたいとき(※例えば、データのロードが完了後に遷移させたいなど)
【プロパティ、メソッドの公開。使用方法。】
使用される側画面(クラス)のヘッダーファイルで、プロパティ、メソッドを定義。
使用する側画面(クラス)で、「#import “使用される側画面のクラス名.h”」を記述し、実際にプロパティメソッドを使用する。
【画像処理といえば、GPUImageを使え】
http://qiita.com/yimajo/items/e38e8bafc17144b7af79
・とりあえず、高速
・独自のフィルターを作れる。
【ModalViewを使用した画面遷移】
◯画面遷移は2種類ある
「UIパーツを使用したSegue」
performSegueWithIdentifierを使用。
「プログラムで遷移」
1.遷移先画面(ViewController)の生成
instantiateViewControllerWithIdentifier:を使用
2.生成した画面先への移動処理
presentViewController:animated:completion:を使用
◯画面遷移後、[元の画面に戻る]方法も同様に2種類存在する。
「Unwind Segueを使用する」方法
「delegateを使用する」方法
メソッドを利用する側は、そのクラスについて知る必要はなく、インタフェースに従うのみとすることでクラス間の依存を取り除くデザインパターン
dismissViewControllerAnimated:completion:を使用
◯値は遷移先の画面に渡すことが可能。
遷移先の画面Controllerを取得して、Controllerの画面に値を設定する(UIViewController *destination = segue.destinationViewController)
実装方法は、以下状態を使用。
https://github.com/mixi-inc/iOSTraining/wiki/1.4-UIViewController2-ModalViewController-(storyboard)
【UIViewControllerのライフサイクル】
https://github.com/mixi-inc/iOSTraining/wiki/1.5-UIViewController3---ライフサイクル
◯UIViewControllerの生成方法
以下3種類が存在する
・-initWithCoder:
NSCodeingプロトコルのメソッド。
UIViewControllerのイニシャライザではなく、準拠しているNSCodingプロトコルのメソッド。
・-initWithNibName:bundle:
UiViewControllerのレイアウトが記述されたxibからViewControllerを生成する際に呼ばれるメソッド。
xibファイルから生成する場合は、これを呼ぶ。
・-init:
NSObjectのイニシャライザです。
このメソッドを呼ぶと、自動的にinitWithNibName:bundle:が呼ばれる。
◯イニシャライザの注意点
・イニシャライザの中で、「viewのレイアウト」を定義することはできない。
(なぜなら、イニシャライザが呼ばれた段階ではViewControllerとしてのインスタンスは生成されているがviewのインスタンスは生成されていない。)
※Viewの読み込みが完了すると、- ViewDidLoadが呼ばれ、
この段階で、レイアウトや追加コード挿入が可能となる。
・初期化メソッドが複数アルので、呼び出し方、呼び出され方を意識してイニシャライザを記述する必要がある。
◯ViewControllerのライフサイクル絡みの、メソッド呼び出され順
loadView
viewDidLoad ← Viewの読込完了 ※このタイミングでレイアウトや追加コード挿入を行う
viewWillAppear ← Viewが表示される前
(その後、表示アニメーションが実行される)
viewWillLayoutSubviews ←レイアウト処理開始時
viewDisLayoutSubviews ←レイアウト処理終了時
viewDidAppear ← Viewが表示された後
viewWillDisappear ← Viewが非表示になる前(その後、遷移アニメーションが実行される)
viewDidDisappear ← Viewが非表示になった後
※レイアウト処理:画面読込 / ★縦横変更
以下サイトに、わかりやすく書かれています。
http://qiita.com/mo_to_44/items/0ca628b4cc74c8c5599d
【NavigationControllerに関して】
https://github.com/mixi-inc/iOSTraining/wiki/2.1-UINavigationController
◯UINavigationControllerは、複数のUIVIewControllerをスタック(先入後出)で管理している。
◯UIViewControllerは、元々navifationControllerのプロパティを持っている。
そのため、navigationControllerプロパティに新たに追加するUIViewControllerをpushする。
◯NavigationBarに値を設定する方法
UIViewControllerのプロパティtitleに文字列を設定する。
◯UINavigationBar は UINavigationItem を管理するためのコンテナ
ここでNavigationBar(上部分)のタイトル、左の戻るボタン、右のボタンを追加制御できる。
◯UIAppearance
特定の UIComponent のデザインを一括変更
【UITabBarControllerに関して】
https://github.com/mixi-inc/iOSTraining/wiki/2.2-UITabController
◯ UITabBarControllerの重要なproperty、method
・viewControllers - viewController が含まれている NSArray
・selectedViewController - 現在表示されている ViewController(値を設定し直すことで別のViewControllerに変更できる)
・delegate - 表示変更などのイベント取得可能
◯viewControllerに5つ以上のViewControllerを設定すると、
Tabで4つ表示されて、それ以上はMoreになる。