3

ユーザーが画面に触れ始め、指を動かし、タッチを終了したときに、いくつかのアクションを実行する必要があります。タッチ開始は正常に動作し、移動も同様ですが、タッチ終了は 0.5 ~ 1 秒の遅延で実行されます。以下にコードがあります:

-(id) init {    
    if (self = [super init]) {
        //Adding a listener for catching touch events and get call back to selector method 
        [self addGestureListener:@selector(gestureCallback:)];

        CCScene *scene = [CCScene node];

        [scene addChild: self];

        [[CCDirector sharedDirector] runWithScene:scene];
    }
    return self;
} 

- (UIPanGestureRecognizer *)addGestureListener:(SEL)selector {
    UIPanGestureRecognizer *recognizer = [[[UIPanGestureRecognizer alloc] initWithTarget:self action:selector] autorelease];
    [[[CCDirector sharedDirector] openGLView] addGestureRecognizer:recognizer];
    return recognizer;
}

-(void) gestureCallback:(UIPanGestureRecognizer *) recognizer {

    if (recognizer.state == UIGestureRecognizerStateBegan) {
        NSLog(@"start");
    } else if (recognizer.state == UIGestureRecognizerStateChanged) {
        NSLog(@"moved");
    } else if (recognizer.state == UIGestureRecognizerStateEnded) {
        NSLog(@"ended");
    }
}

ログ (最後の 2 行) には、次のように表示されます。

2012-10-15 11:29:03.609 App[6169:c07] moved
2012-10-15 11:29:04.267 App[6169:c07] ended

何か案は?

4

2 に答える 2

1

GestureRecognizer のdelaysTouchesEndedプロパティを見てください。Appleのドキュメントから:

このプロパティの値が YES (デフォルト) で、レシーバーがタッチ イベントを分析している場合、ウィンドウは UITouchPhaseEnded フェーズのタッチ オブジェクトのアタッチされたビューへの配信を中断します。その後、ジェスチャ レコグナイザーがそのジェスチャを認識すると、これらのタッチ オブジェクトはキャンセルされます (touchesCancelled:withEvent: メッセージを介して)。ジェスチャ レコグナイザがそのジェスチャを認識しない場合、ウィンドウはビューの touchesEnded:withEvent: メソッドの呼び出しでこれらのオブジェクトを配信します。このプロパティを NO に設定すると、ジェスチャ レコグナイザーが同じタッチを分析している間に UITouchPhaseEnded 内のタッチ オブジェクトがビューに配信されます。

于 2013-10-31T22:04:56.007 に答える