基本的な使い方
UIPageViewControllerと、UIPageViewControllerDataSourceプロトコルを使うと、実際の中身のページを良い感じで切り替えてくれる。
- 必要に応じてUIPageViewControllerDelegateプロトコルを実装する。
- 実際のページ用のUIViewControllerのサブクラスを実装する。
- UIPageViewControllerDataSourceプロトコルを実装する。(親クラスはNSObjectとかでよい)
- データを保持してページ指定にしたがって取り出せるような感じの実装しておく。
- ページ遷移が発生したら実際のページインスタンスを生成しデータを紐付けるような処理をさせる。
- pageViewController:pageViewController viewControllerBeforeViewController:viewController
- pageViewController:pageViewController viewControllerAfterViewController:viewController
- UIPageViewController::dataSourceにUIPageViewControllerDataSourceインスタンスを設定する
- 初期化時
- UIPageViewControllerのインスタンスをつくる。
- UIPageViewControllerのインスタンスに最初のページをセットする。
- UIPageViewControllerインスタンスを親UIViewControllerに関連づける。
参考)http://d.hatena.ne.jp/hyoromo/20130406/1365274911
構成
親のUIViewControllerがUIPageViewControllerとUIPageViewControllerDataSource,、UIPageControlを持っていて遷移の概要を管理し、データそのものと中身のページは基本的にUIPageViewControllerDataSourceが与えるような感じみたいです。
UIPageViewControllerの実装
初期化時にいくつか設定する。
- transitionStyle
- ページ送りの表現の種類。カールするかスライドか選べる。
- UIPageViewControllerTransitionStyle
- navigationOperation
- ページ送りする方向の設定。縦か横か選べる。
- UIPageViewControllerNavigationOrientation
本のレイアウト情報であるspineLocationとか余白の設定をしたい場合はNSDictionaryに入れてoptionsで渡すと設定できる。
これらは基本的にすべてread-only。
参考) http://d.hatena.ne.jp/hyoromo/20130422/1366658331
もしStoryBoardで上記のプロパティを設定する場合、クラスをUIPageViewControllerにセットしておけばAttributes Inspectorのところにそれ用のチェックボックスが出てくるので適宜設定しておく。
構成としてはUIPageViewControllerを継承してStoryboardで管理しようと思ったけど、
UIPageControlを直接は保持できないみたいだし、他のUIViewControllerに紐付けるわけでもなかったので、コードでインスタンス化する形にしました。
UIPageViewControllerDataSourceプロトコルの実装
プロトコルさえ実装されていればNSObjectでもなんでもいい。
ページが遷移した時に次のUIViewControllerを返すメソッドを実装する感じです。
前後にページ遷移が発生したことが分かるだけでindex的なものは持っていないため、NSArrayとかで管理したいのであれば適宜実装する。
発生した方向に次のUIViewControllerがなければnilを返す。
UIPageViewControllerDelegateの実装
画面遷移の前後のタイミングやデバイスの向きが変わったときに呼ばれるみたいです。
公式ドキュメント
これは2013-09-24の記事からの転載です