忍者ブログ

佐崎司と愉快な仲間達

ゲーム、アニメ、CG、iOS開発など思いついたことを記事にしています。 管理人が3人いますので、記事にまとまりはないと思います。 iPhoneアプリのレビュー依頼も受け付けています。

UIPageViewControllerの問題点について4

わか

UIPageViewControllerに関して、最初のページと最後のページのスワイプアニメーションのキャンセル処理に関して悩んだので、備忘録を記載します。

UIPageViewControllerを使用して、ページめくりアニメーションを実装した際に、最初のページからさらに前ページをスワイプして移動できてしまう問題が発生しました。
当然、最初のページより前のページは存在しないのでエラーが発生しました。
色々調査した結果、解決策は以下です。

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
    
    BOOL ret = YES;
    CGPoint velocity = [(UIPanGestureRecognizer*)gestureRecognizer velocityInView:self.view];
            
    // 最初のページ
    if (currentPageIndex == 0) {         
        if(velocity.x > 0) {
            // 右スワイプ
            ret = NO;
        } else {
            // 左スワイプ
            ret = YES;
        }
    }

    return ret;
}


UIPageViewController のUIPanGestureRecognizerのdelegateを指定してやると、ドラッグ時に上記メソッドが呼ばれます。その際にスワイプ方向を検知してジェスチャーを処理するかどうかを返せば良いです。

ただしこの方法はページめくりアニメーションには有効ですが、スクロールアニメーションでは使用できません。
以前の記事にも記載しましたが、スクロールアニメーションの場合、
viewControllerBeforeViewController viewControllerAfterViewController

にてnilを返せば良いようです。

拍手[0回]

PR