3

UIPageViewContollerを使用してブックのようなページめくりを作成しています。私の本のページは、iPhone画面の全幅よりも18px狭く、画面の左側に固定されています。私のUIPageViewControllerのビューのフレームは、これらのページのフレームサイズ(width:302、height:460)に設定されます。これは、ブックに複数のページがあり、ページがiBooksアプリのように現在の表示ページの端から始まるように見えるようにするためです。UIPanGestureRecognizerを1つのビューから別のビューで処理するように渡します。

私が抱えている問題は、誰かが画面の右端から、302ピクセルポイントを超えてパンすることによってページをめくると、パンジェスチャがUIPageViewControllerによってキャプチャされず、ページが回転しない場合です。私は多くのユーザーがページをこのように変えようとしているのを見てきましたので、UIデザインを変更せずにこの経験を修正したいと思います。

私は、UIPageViewControllerの外の領域からUIPanGestureを取得してUIPageViewControllerに渡すことができると考えています。私は正常に全体のビューの背景として持っている画像ビューを使用してパンのジェスチャーをキャプチャしましたが、私はページの回転を処理するためにジェスチャーをUIPageViewControllerに渡す方法を把握することはできません。

- (void) viewDidLoad { 
...  

    // Add a swipe gesture recognizer to grab page flip swipes that start from the far right of the screen, past the edge of the book page 
    self.panGesture = [[[UIPanGestureRecognizer alloc] initWithTarget:self action:nil] autorelease]; 
    [self.panGesture setDelegate:self]; 
    [self.iv_background addGestureRecognizer:self.panGesture]; 

    //enable gesture events on the background image 
    [self.iv_background setUserInteractionEnabled:YES]; 

... 
} 


#pragma mark - UIGestureRecognizer Delegates 
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
    // test if our control subview is on-screen 
    if (self.pageController.view.superview != nil) { 
     if (gestureRecognizer == self.panGesture) { 
      // we touched background of the BookViewController, pass the pan to the UIPageViewController 
      [self.pageController.view touchesBegan:[NSSet setWithObject:touch] withEvent:UIEventTypeTouches]; 

      return YES; // handle the touch 
     } 
    } 
    return YES; // handle the touch 
} 
+0

では、あなたがこれを行う方法を見つけました宣言しましたか?私は似たようなことをしています。私はそれに形を持っているMedia Subviewを持っています。私は、サブビューから形状をドラッグし、それをメインキャンバスビュー上にドラッグし続けたいと思います。 – scooter133

+0

まだ解決策はありません。 – chazzwozzer

+0

私はいくつかのAppsを見ました。現在の考え方では、ジェスチャはTopViewでTransparentであり、下部の目的地ビューに渡されます。ジェスチャは座標を上部ビューに変換し、そのビューで実際に何がクリックされたかを判断し、ドラッグイメージを作成して移動します。しかし、この時点でちょうど考え。 – scooter133

答えて

3

UIPageViewControllerにはgestureRecognizersプロパティがあります。ドキュメントはあなたが探している正確に何を説明しているようだ:

gestureRecognizers

ユーザーとの対話を処理するように設定されているUIGestureRecognizerオブジェクトの配列。 (読み取り専用)

@property(非アトミック、読み取り専用)にNSArray * gestureRecognizers

議論

これらのジェスチャ認識装置は、最初のページ ビューコントローラの階層のビューに取り付けられています。 ユーザーがジェスチャーを使用してナビゲートできる の画面領域を変更するには、 別のビューに配置することができます。

可用性

のiOS 5.0で利用可能

以降。

UIPageViewController.h

+0

ありがとう!以前はPageViewControllerのgestureRecognizers配列に精通していましたが、なぜ私はViewControllerのビューのジェスチャ認識子をUIPageViewControllerのものと置き換えようとしなかったのか分かりません。 'viewDidLoad:' 'self.view.gestureRecognizers = self.pageController.gestureRecognizers;' – chazzwozzer

+0

ありがとうございました。Chazzwozzerのコードスニペットがやった。私たちを正しい方向に向けることに感謝します。 –

関連する問題