10
iOS 5で搭載された ページコントローラー Masayuki Nii Cocoa Study #51 2012/3/17 1 12317日土曜日

Cocoa勉強会#51-iOS 5で搭載されたページコントローラー

Embed Size (px)

DESCRIPTION

Cocoa勉強会#48 2012/3/17 全画面、ファイル履歴、Lionの新しい機能に対応する 新居雅行

Citation preview

Page 1: Cocoa勉強会#51-iOS 5で搭載されたページコントローラー

iOS 5で搭載されたページコントローラー

Masayuki NiiCocoa Study #512012/3/17

112年3月17日土曜日

Page 2: Cocoa勉強会#51-iOS 5で搭載されたページコントローラー

Agenda

ページビューの階層化

UIPageViewControllerとテンプレート

動作を確認する

利用例

212年3月17日土曜日

Page 3: Cocoa勉強会#51-iOS 5で搭載されたページコントローラー

ビューコントローラの階層化

従来からある複数のビューコントローラ• ナビゲーションコントローラ、タブコントローラ• 複数のビューコントローラを持つビューコントローラ=コンテナビューコントローラ• 1ページを複数のビューコントローラで管理する• iOS 5で、汎用的に利用できるようになった

UIViewControllerクラスに追加されたメソッド• -addChildViewController:• -removeFromParentViewController• -transitionFromViewController:toViewController:duration:options:animations:completion:• -willMoveToParentViewController:• -didMoveToParentViewController:• -automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers• 独自にUIViewControllerの継承クラスを作るときにはさまざまなメソッドのオーバライドができる

312年3月17日土曜日

Page 4: Cocoa勉強会#51-iOS 5で搭載されたページコントローラー

ビューコントローラの階層化

UIViewControllerに追加されたプロパティ• childViewControllers:所属しているビューコントローラの配列• parentViewController:自分の親のビューコントローラその他注意点• -presentViewController:animated:completion:によってビューを表示• -presentModalViewController:animated:メソッドは使わずに、上記のメソッドを使うようにと記述されている

412年3月17日土曜日

Page 5: Cocoa勉強会#51-iOS 5で搭載されたページコントローラー

ビューコントローラの階層化を利用したクラス

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日土曜日

Page 6: Cocoa勉強会#51-iOS 5で搭載されたページコントローラー

さて、ページビューを使ってみよう!

とはいえ、これはAPIだけだとさっぱりわからん• サンプルプログラムもないプロジェクトのテンプレートに「Page-Based Application」がある• シンプルな動作である• これを開いてみてビックリ!• ある独特なパターンを想定したクラスだった

612年3月17日土曜日

Page 7: Cocoa勉強会#51-iOS 5で搭載されたページコントローラー

「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日土曜日

Page 8: Cocoa勉強会#51-iOS 5で搭載されたページコントローラー

動作をチェックする

BookViewer_Starterプロジェクト• メソッドのエントリーにNSLogを入れてある次のような動作を調べる• iPadシミュレータを縦長にしておく• Check! 起動して縦長の1ページ目が出るまでの動作• Check! 1ページ分めくったときの動作• Check! 回転させる• Check! 横長で1ページをめくる

812年3月17日土曜日

Page 9: Cocoa勉強会#51-iOS 5で搭載されたページコントローラー

作成例

PhotoAlbum• アプリケーションバンドル内の写真をページとして表示するBookViewer• サンプルのPDF:http://msyk.net/ios/sample1.pdf• いわゆるPDFビューアで、SfariよりPDFを供給する• APIは拡大するとやや荒れるもの• ブラウザから開くこれらのサンプルは勉強会の中だけにしてください配布はしないでください

912年3月17日土曜日

Page 10: Cocoa勉強会#51-iOS 5で搭載されたページコントローラー

まとめ

ページビューは「APIの問題」ではなく、一定のオブジェクトの配置を想定した「パターンを持つクラス」であった

1012年3月17日土曜日