Upload
masayuki-nii
View
530
Download
1
Embed Size (px)
DESCRIPTION
Cocoa勉強会#48 2012/3/17 全画面、ファイル履歴、Lionの新しい機能に対応する 新居雅行
Citation preview
iOS 5で搭載されたページコントローラー
Masayuki NiiCocoa Study #512012/3/17
112年3月17日土曜日
Agenda
ページビューの階層化
UIPageViewControllerとテンプレート
動作を確認する
利用例
212年3月17日土曜日
ビューコントローラの階層化
従来からある複数のビューコントローラ• ナビゲーションコントローラ、タブコントローラ• 複数のビューコントローラを持つビューコントローラ=コンテナビューコントローラ• 1ページを複数のビューコントローラで管理する• iOS 5で、汎用的に利用できるようになった
UIViewControllerクラスに追加されたメソッド• -addChildViewController:• -removeFromParentViewController• -transitionFromViewController:toViewController:duration:options:animations:completion:• -willMoveToParentViewController:• -didMoveToParentViewController:• -automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers• 独自にUIViewControllerの継承クラスを作るときにはさまざまなメソッドのオーバライドができる
312年3月17日土曜日
ビューコントローラの階層化
UIViewControllerに追加されたプロパティ• childViewControllers:所属しているビューコントローラの配列• parentViewController:自分の親のビューコントローラその他注意点• -presentViewController:animated:completion:によってビューを表示• -presentModalViewController:animated:メソッドは使わずに、上記のメソッドを使うようにと記述されている
412年3月17日土曜日
ビューコントローラの階層化を利用したクラス
UIPageViewControllerによるページめくりビュー• iOS 5より登場したクラスで、ページめくり機能を提供するビューコントローラ• 1つ1つのページが「ビューコントローラによって管理されるビュー」
UIPageViewControllerクラス• -initWithTransitionStyle:navigationOrientation:options::初期化メソッド• -setViewControllers:direction:animated:completion::ビューコントローラの登録• dataSource:データソース/delegate:デリゲート/viewControllers:登録されているビュー
コントローラ/gestureRecognizers:ジェスチャー• navigationOrientation:方向/spineLocation:スピンの位置/transitionStyle:ビュー移動の
形式/doubleSided:2面表示
UIPageViewControllerDataSourceクラス• -pageViewController:viewControllerBeforeViewController::次のビューコントローラを返す• -pageViewController:viewControllerAfterViewController::前のビューコントローラを返す• UIPageViewControllerDelegateクラス• -pageViewController:didFinishAnimating:previousViewControllers:transitionCompleted::
ページ移動後に呼び出される• -pageViewController:spineLocationForInterfaceOrientation::方向に応じたスピン位置を返す
512年3月17日土曜日
さて、ページビューを使ってみよう!
とはいえ、これはAPIだけだとさっぱりわからん• サンプルプログラムもないプロジェクトのテンプレートに「Page-Based Application」がある• シンプルな動作である• これを開いてみてビックリ!• ある独特なパターンを想定したクラスだった
612年3月17日土曜日
「Page-Based Application」によるアプリケーションのオブジェクト関係
UIApplicationMain
MainStoryboard
UIApplication
UIWindow
AppDelegate
RootViewController DataViewController
PageViewController
delegate
window
rootViewController
dataSource
window
生成
プロパティ参照
DataViewController
viewControllers
viewControllers
iPad画面
ModelController
DataViewController
modelController
delegate
712年3月17日土曜日
動作をチェックする
BookViewer_Starterプロジェクト• メソッドのエントリーにNSLogを入れてある次のような動作を調べる• iPadシミュレータを縦長にしておく• Check! 起動して縦長の1ページ目が出るまでの動作• Check! 1ページ分めくったときの動作• Check! 回転させる• Check! 横長で1ページをめくる
812年3月17日土曜日
作成例
PhotoAlbum• アプリケーションバンドル内の写真をページとして表示するBookViewer• サンプルのPDF:http://msyk.net/ios/sample1.pdf• いわゆるPDFビューアで、SfariよりPDFを供給する• APIは拡大するとやや荒れるもの• ブラウザから開くこれらのサンプルは勉強会の中だけにしてください配布はしないでください
912年3月17日土曜日
まとめ
ページビューは「APIの問題」ではなく、一定のオブジェクトの配置を想定した「パターンを持つクラス」であった
1012年3月17日土曜日