4

iPad iOS5 用の Xcode 4 でページベースのアプリケーションを作成しました。

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

私の問題は、画面のどこを押しても、境界線でページがめくれることです。

このコードを使用して、指でフリップをキャンセルすることができました。

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

画面内の特定の領域を定義して、その領域をタップするとその領域だけがページをめくるにはどうすればよいですか?

画面の下部にツールバーを配置し、ツールバーのボタンをクリックするとページがめくれるため、これを尋ねます。画面に2つの矢印を配置したいのですが、それらを押すとページがめくれます。

私の説明が少しさびていたらごめんなさい。皆さん、ありがとうございました。

4

2 に答える 2

4

Cipramillの答えは正しいです-ここに詳細があります。

IOSのドキュメントでは、ページめくりジェスチャをアクティブにする領域を示すために新しいビューを追加することを提案していますが、この方法ははるかに簡単です。MQ1RootViewController.hおよびMQ1RootViewController.mのXcode4によって設定されたデフォルトのテンプレートにコードを追加します。

MQ1RootViewController.hのインターフェイス行を変更します。

@interface MQ1RootViewController : UIViewController <UIPageViewControllerDelegate,       
    UIGestureRecognizerDelegate>

MQ1RootViewController.mのviewDidLoadの一番下に次のコードを追加します。

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;
}

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

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

于 2012-06-26T05:46:07.687 に答える
2

ジェスチャ システムにフックして、タッチを受け入れる領域を定義できます。

この説明では、RootViewController にUIPageViewController子 VCがあると仮定します。

-ルートView Controllerを実装するように設定しますUIGestureRecognizerDelegate

- RootViewControllers で pageVC のすべてのジェスチャ レコグナイザーを引き継ぎますViewDidLoad

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

-最後に、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;
}

お役に立てれば

于 2012-01-26T20:45:05.700 に答える