8

私のアプリでは、3.2SDKで利用できる新しいジェスチャ認識機能を追加しました。すべてが正常に機能しているように見え、画面の応答時間は非常に高速でした。しかし、何らかの理由requireGestureRecognizerToFailでジェスチャーの一部を追加すると、ジェスチャーがトリガーされるときに非常に目に見える遅延が発生します。以下は、ジェスチャ認識機能を作成するために使用するコードのスニペットです。なぜ遅延があるのか​​、どうすれば修正できるのか誰かが知っていますか?ユーザーがを実行したときにジェスチャーがトリガーrequireGestureRecognizerToFailされないようにするために使用しています。SingleTapDoubleTap

 - (void)createGestureRecognizers {

 //Single Finger Double-Tap
 UITapGestureRecognizer *singleFingerDTap = [[UITapGestureRecognizer alloc]
            initWithTarget:self action:@selector(handleSingleDoubleTap:)];
    singleFingerDTap.numberOfTapsRequired = 2;
    [super addGestureRecognizer:singleFingerDTap];

 //Single Finger Tap
 UITapGestureRecognizer *singleFingerTap = [[UITapGestureRecognizer alloc]
              initWithTarget:self action:@selector(handleSingleTap:)];
    singleFingerTap.numberOfTapsRequired = 1;
 [singleFingerTap  requireGestureRecognizerToFail:singleFingerDTap];
 [self addGestureRecognizer:singleFingerTap];

 //Two Finger Pan
 UIPanGestureRecognizer *panGesture2 = [[UIPanGestureRecognizer alloc]
            initWithTarget:self action:@selector(handlePanGesture2:)];
    panGesture2.maximumNumberOfTouches = 2;
 [super addGestureRecognizer:panGesture2];

 //Single Finger Pan
 UIPanGestureRecognizer *panGesture1 = [[UIPanGestureRecognizer alloc]
             initWithTarget:self action:@selector(handlePanGesture1:)];
    panGesture1.maximumNumberOfTouches = 1;
 [panGesture1 requireGestureRecognizerToFail:panGesture2];
 [super addGestureRecognizer:panGesture1];

 [singleFingerDTap release];
 [singleFingerTap release];
    [panGesture1 release];
 [panGesture2 release];
}
4

1 に答える 1

5

シングルタップとダブルタップを区別したい場合は、シングルタップと呼ぶ前に、2番目のタップが来ていないことを理解するのに十分な時間待つ必要があります。別の方法は、ダブルタップが検出されたときに非同期でキャンセルまたは元に戻すことができるように、すべてのシングルタップアクションを設計することです。

たとえば、シングルタップ変更ページとダブルタップズームがある場合、シングルタップでページ変更をアニメーション化し、アニメーションを反転して、2番目のタップが検出されたときに代わりにズームする必要があります。その時までに、シングルタップを処理したビューが移動した可能性があります。ほとんどの場合、それは価値があるよりも多くの問題と混乱です。

于 2010-06-20T23:01:40.477 に答える