18

私のスワイプジェスチャーの方向を検出する必要があり、問題があります。ジェスチャーは機能していますが、方向を検出する方法はわかりません。 ...スワイプのジェスチャー方向を検出する方法は?

swipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(detectSwipe:)]; 
[swipeGesture setNumberOfTouchesRequired:1]; 
[swipeGesture setDirection:UISwipeGestureRecognizerDirectionDown | UISwipeGestureRecognizerDirectionUp]; 
[appView addGestureRecognizer:swipeGesture]; 

-(void)detectSwipe:(UISwipeGestureRecognizer *)recognizer { 
switch (recognizer.direction) { 
    case UISwipeGestureRecognizerDirectionUp: 
     NSLog(@"smth1"); 
     break; 


    case UISwipeGestureRecognizerDirectionDown: 
     NSLog(@"smth2"); 
    default: 
     break; 
} 
} 

それは働いていない:/

+0

定義してください「それは働いていません。」ログに間違った値がありますか?ログに何も記録されませんか? detectSwipeは呼び出されていませんか? – sosborn

+0

私が上にスワイプするか下にスワイプすると 'default'ケースが呼び出されます。 –

+0

これは単なる列挙型なので、レコグナイザの値をキャストしてログに記録しようとしました:http://developer.apple.com/library/IOs/#documentation/UIKit/Reference/UISwipeGestureRecognizer_Class/Reference/Reference.html – bryanmac

答えて

20

directionプロパティはは気の抜けたビールとして認識されている方向を許さ定義し、特定のスワイプのない実際方向。

代わりに、2つの別々のジェスチャ認識子を使用するのが最も簡単です。また、ジェスチャが開始されたとき、およびlocationInView:メソッドで終了するときに、タッチの位置を調べることもできます。 OMZのソリューションを拡張

+0

'CGPoint start = [swipeGesture locationInView:appView];'これを使用してこの関数はスワイプの開始点を与えますが、スワイプが終了したときにどのように検出されますか? 'touchesBegan'と' touchesEnded'を使う方法がありますか? –

+1

これが実際に可能かどうかはわかりません(おそらく2つの認識機能を使う方が良いでしょう)。あなたの行動でジェスチャーレコグナイザーの '状態'をチェックしてください。ほとんどのジェスチャ認識プログラムでは、 'UIGestureRecognizerStateBegan'から' UIGestureRecognizerStateEnded'に遷移しますが、スワイプジェスチャ認識ツールタイプはそれを実行しない可能性があります。試していません。 – omz

+1

を解決しました。私は 'touchesBegan'と' touchesEnded'を使います。 –

11

self.myViewは、私が上のジェスチャー認識を配置する図です。以下のコードはテストされていませんが、認識ツールをpropertyとし、viewDidLoad()またはxibファイルに追加する方が良いでしょう。 selfUIViewControllerです。

UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipedLeft:)]; 
[swipeLeft setDirection:UISwipeGestureRecognizerDirectionLeft ]; 
[self.view addGestureRecognizer:swipeLeft]; 

UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipedRight:)]; 
[swipeRight setDirection:UISwipeGestureRecognizerDirectionRight ]; 
[self.view addGestureRecognizer:swipeRight]; 

あなたUIViewControllerに、これらの2つのメソッドを追加し、必要なアクションを追加します。ここでは

- (IBAction)swipedRight:(UISwipeGestureRecognizer *)recognizer 
{ 
    NSLog(@"swiped right"); 
} 

- (IBAction)swipedLeft:(UISwipeGestureRecognizer *)recognizer 
{ 
    NSLog(@"swiped left"); 
} 
47

は私のプロジェクトの一つの例である:

// ... 

    UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipe:)]; 
    swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft; 
    [self.view addGestureRecognizer:swipeLeft]; 

    UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipe:)]; 
    swipeRight.direction = UISwipeGestureRecognizerDirectionRight; 
    [self.view addGestureRecognizer:swipeRight]; 

    UISwipeGestureRecognizer *swipeUp = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipe:)]; 
    swipeUp.direction = UISwipeGestureRecognizerDirectionUp; 
    [self.view addGestureRecognizer:swipeUp]; 

    UISwipeGestureRecognizer *swipeDown = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipe:)]; 
    swipeDown.direction = UISwipeGestureRecognizerDirectionDown; 
    [self.view addGestureRecognizer:swipeDown]; 

    // ... 

- (void)didSwipe:(UISwipeGestureRecognizer*)swipe{ 

    if (swipe.direction == UISwipeGestureRecognizerDirectionLeft) { 
     NSLog(@"Swipe Left"); 
    } else if (swipe.direction == UISwipeGestureRecognizerDirectionRight) { 
     NSLog(@"Swipe Right"); 
    } else if (swipe.direction == UISwipeGestureRecognizerDirectionUp) { 
     NSLog(@"Swipe Up"); 
    } else if (swipe.direction == UISwipeGestureRecognizerDirectionDown) { 
     NSLog(@"Swipe Down"); 
    } 
} 
+0

それは私の完璧な解決策のために働いています –

+0

私はあなたが4ジェスチャーレコグナイザを追加する必要はないと思う、ちょうど1つを追加し、didSwipeメソッドで送信者のスワイプ方向をチェックする –

関連する問題