0

UISwipeGestureRecognizerを使用してiPhoneでスワイプジェスチャを取得しています。スワイプタッチの開始時とスワイプタッチの終了時に2つのロケーションポイントを取得したい。以下のようにスワイプタッチ方式を実装しました

- (void)handleSwipeFrom:(UISwipeGestureRecognizer *)recognizer {

    CGPoint touchLocation = [recognizer locationInView:recognizer.view];
    touchLocation = [[CCDirector sharedDirector] convertToGL:touchLocation];
    touchLocation = [self convertToNodeSpace:touchLocation];

    CCLOG(@"Hello %@ - %d",NSStringFromCGPoint(touchLocation),recognizer.state);

    if (recognizer.state == UIGestureRecognizerStateBegan) {

        CGPoint touchLocation = [recognizer locationInView:recognizer.view];
        touchLocation = [[CCDirector sharedDirector] convertToGL:touchLocation];
        touchLocation = [self convertToNodeSpace:touchLocation];

        CCLOG(@"UIGestureRecognizerStateBegan %@",NSStringFromCGPoint(touchLocation));

    } else if (recognizer.state == UIGestureRecognizerStateChanged) {    

        CCLOG(@"UIGestureRecognizerStateChanged");

    } else if (recognizer.state == UIGestureRecognizerStateEnded) {
        CGPoint touchLocationEnd = [recognizer locationInView:recognizer.view];
        touchLocationEnd = [[CCDirector sharedDirector] convertToGL:touchLocationEnd];
        touchLocationEnd = [self convertToNodeSpace:touchLocationEnd];
        CCLOG(@"UIGestureRecognizerStateEnded %@",NSStringFromCGPoint(touchLocationEnd));
        }        

    //}
}

スワイプタッチが機能しています。ただし、UIGestureRecognizerStateEndedのみが表示されます。画面をスワイプしてタッチがまだ終了していないのに、StateEndedが呼び出された場合でも。StateBeginを呼び出して、場所を取得してからStateEndを取得するにはどうすればよいですか。現在、StateEndedだけが機能しており、他の2つのBeginとChangingは機能していません。

4

1 に答える 1

1

更新: 理由がわかりました:

スワイプは個別のジェスチャであるため、関連するアクションメッセージはジェスチャごとに1回だけ送信されます。

そしてこの画像: ここに画像の説明を入力してください

したがって、UISwipeGestureRecognizer:possible、recognized、およびendedの状態は3つだけです。しかし、なぜ可能性が呼び出されないのかはまだわかりません。


私はあなたのコードを試しましたが、同じ結果が得られました。なぜこれが起こるのかもわかりません。この問題の解決策が見つからない場合は、fortouchメソッドを使用してタッチを自分で分析することをお勧めします。これは確かにイベントを処理できますが、ジェスチャレコグナイザーを使用するよりも少し複雑です。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;
于 2013-02-04T11:21:47.880 に答える