UIPageViewControllerとジェスチャー


iOS 5から追加されたUIPageViewControllerクラス。こいつを使うとページめくりができる。ひとつのページがひとつのビューコントローラになって、それを連ねる事で本みたいなものができるという仕組み。ビューコントローラベースなのが、ありがたい。将来的には、ページめくり以外にもいろいろなエフェクトが追加されて、Keynoteのスライドエフェクトみたいなものができるかも。

UIPageViewControllerは、デフォルトでタップやパンといったジェスチャーに対応している。画面の両端をシングルタップするとページめくり。パンすると追随するページめくり、といった感じ。これは便利。でもアプリに組み込んでいくと、独自のジェスチャーも追加したくなる。シングルタップでツールバー表示とかね。

そういったときは、UIPageViewControllerのgestureRecognizersプロパティを使う。これを経由して、UIPageViewControllerが管理しているジェスチャーにアクセスできる。ということは、こいつらのデリゲートとして自分のクラスを設定して、そこでgestureRecognizerShouldeBegin:といったようなUIGestureRecognizerDelegateのメソッドを実装してやる。そうすれば制御できる。

たとえばシングルタップ。ページ両端だったらページめくりで、それ以外だったらツールバー表示にしたい。となると、gestureRecognizerShouldeBegin:で受けて、タッチしたポジションを取得して、それが両端だったらYESを返してUIPageViewControllerに処理を任せる。そうでなければNOを返して、自前の処理にする。両端をタップしたかどうか?ってのは自分で判断しないといけないような気がする。

または新規にUIGestureRecognizerのインスタンスを作って、requireGestureRecognizerToFail:でどうにかするっていう手もあるかもしれない。でもこれ、うまくいくときといかないときがある感じ。どんなジェスチャーを追加したいかによる。

正直、UIPageViewControllerのAPIはまだこなれていない感じがするね。これ、新規に追加されたクラスではよくある。基本的な機能はきちんと実装されている。でもカスタマイズのためのものは、まだ粗削。ジェスチャーの制御に対してきめ細かなAPIを提供するのではなく、gestureRecognizersをポンっと投げて、これさえあれば後はそっちでどうにでもできるでしょ、って感じ。必要ではあるが充分ではない。どうにかしてそれを使って苦労して実装すると、次のバージョンですっごい便利なAPIを追加してきたりする。ムキーッてなる。

  1. コメントはまだありません。

  1. トラックバックはまだありません。