1

私のiPhoneアプリのUIViewControllersの1つに、UIPanGestureRecognizerが接続されているので、ユーザーが左または右にスワイプすると、アプリは1つの画面に進んだり戻ったりします。ただし、問題は、ユーザーが画面を(スワイプではなく)タップしても、画面が進むことです。どうすればこれを防ぐことができますか。以下の関連コードを貼り付けました。

-(void) addGestureRecognizer
{
    UIPanGestureRecognizer *pan;
    pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(swipeRecognized:)];
    [pan setMinimumNumberOfTouches:1];
    [self.view addGestureRecognizer:pan];
}

-(void) swipeRecognized: (UIPanGestureRecognizer  *) recognizer
{
    if(recognizer.state != UIGestureRecognizerStateBegan) return;
    CGPoint velocity = [recognizer velocityInView:self.view];
    if(velocity.x > 0)
    {
        [self.navigationController popViewControllerAnimated:YES];
    }
    else
    {
        @try
        {
            [self performSegueWithIdentifier:NEXT_STEP_SEGUE sender:self];
        }
        @catch (NSException *exception)
        {
            //Silently die...muhaha
        }
    }
}
4

2 に答える 2

1

UISwipeGestureRecognizerスワイプには a を使用することをお勧めします。フライパンを使う理由はありますか?

を使用するUISwipeGestureRecognizerと、ジェスチャを認識する方向を指定できます。

適切なジェスチャーを使用することは、ユーザーにとっても良いことです。そうすれば、彼らは家にいるように感じるでしょう:)

于 2012-10-17T20:15:50.373 に答える
0

UISwipeGestureRecognizerfguchelaarによって提案されているように、を使用するか、このtranslationInView:メソッドを使用して、ユーザーが実際に指をどれだけ動かしたかを把握する必要があります(タップの場合、ゼロに近いはずです)。

また、状態が(メソッドの最初の行)でない場合は、早く戻るべきではありませんUIGestureRecognizerStateBegan。そうしないと、ジェスチャの開始時にメソッドが1回だけ呼び出されますが、ジェスチャ中には呼び出されません。それがあなたが実際に望むものであるならば、UISwipeGestureRecognizerあなたが必要とするのはaだけです。パンジェスチャレコグナイザの利点は、ほとんどの場合、ユーザーの指を追跡し、直接フィードバックを提供できることです(指を下に置いたままビューを移動するなど)。

于 2012-10-17T22:08:01.083 に答える