2012-01-26 13 views
4

iPad iOS5用のXcode 4でページベースのアプリケーションを作成しました。ページベースのアプリケーションとジェスチャ認識ツール

アプリを実行すると、書籍のページが表示され、 の画面をタップしたり、左から右、または右から左に指を動かすと、前後に移動できます。

私の問題は、画面内のどこを押していても、境界線でページが回転していることです。

for (UIGestureRecognizer *gR in self.pageViewController.gestureRecognizers) 
{ 
    if ([gR isKindOfClass:[UIPanGestureRecognizer class]]) 
    { 
     [[gR view] removeGestureRecognizer:gR]; 
    } 
} 

がどのように私はそれをタップすることを画面内の特定の領域を定義することができ、そしてそれだけ、ページが変わります:

私はこのコードを指でフリップをキャンセルするために管理していましたか?

ツールバーのボタンをクリックすると、画面の下部にツールバーが表示されるので、これを尋ねます。私は2つの矢印を画面に表示したいのですが、私がそれらを押すとページが反転します。

私の説明が少し錆びている場合は申し訳ありません。皆さん、ありがとうございました。

答えて

2

ジェスチャーシステムにフックして、タッチを受け入れる領域を定義することができます。あなたのルートビューコントローラは、あなたのRootViewControllers ViewDidLoadでごpageVCのためのすべてのジェスチャー認識装置を介してUIGestureRecognizerDelegate

-Takeを実装する-Set

:私はあなたのRootViewControllerが子供VCとしてUIPageViewControllerを持っていると仮定し、この説明で

-最後に、RootViewControllerにジェスチャ認識機能を実装し、無視するゾーンを定義します。

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
{ 
if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) { 
    CGPoint point = [touch locationInView:self.view]; 

    //Examine point and return NO, if gesture should be ignored. 

    } 
    return YES; 
} 

ホープこれは

+0

ありがとう、私は後でそれを試し、あなたを更新します。 – shlomi

+0

こんにちはShlomi、あなたはそれを起動して実行することができましたか? – EsbenB

+0

はい、ありがとうございます! – shlomi

4

Cipramillの答えが正しいことができます - ここではより詳細です。

IOSドキュメンテーションは、ページめくりジェスチャーをアクティブにしたいと思う領域を描く新しいビューを追加することを提案していますが、この方法ははるかに簡単です。 MQ1RootViewController.hで

変更インターフェイスライン:MQ1RootViewController.hとMQ1RootViewController.mにXcodeの4で設定し、デフォルトのテンプレートにコードを追加する

@interface MQ1RootViewController : UIViewController <UIPageViewControllerDelegate,  
    UIGestureRecognizerDelegate> 

をMQ1RootViewController中のviewDidLoadの一番下にこのコードを追加します。 .M:

for (UIGestureRecognizer *gR in self.pageViewController.gestureRecognizers) { 
    gR.delegate = self; 
} 

がMQ1RootViewController.mに、このメソッドを追加します。

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
    shouldReceiveTouch:(UITouch *)touch 
{ 

if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]] 
    || [gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) { 

    CGPoint point = [touch locationInView:self.view]; 

    if(point.x < 100 || point.x > 924) return YES; 

} 

return NO; 
} 

「スワイプ」ジェスチャは、実際にはページビューコントローラオブジェクトによる「パン」ジェスチャから派生していることに注意してください。

上記では、ジェスチャを画面の左右の端に限定しています。これにより、誤って誤ってスワイプしたページを変更することなく、ジェスチャを使用して画面中央のオブジェクトとやりとりすることができます。

関連する問題