0

すべての主要なジェスチャーをキャプチャする必要があります。たとえば、ユーザーが 1 回タップしたとき、2 回タップしたとき、1 本の指で 1 回タップしたとき、2 本の指で 2 回タップしたとき、ピンチしたとき、指を回転したとき、2 本の指をドラッグしたときに 1 本の指をドラッグしたときを追跡できるようにしたい.

このすべての機能を実行する方法はわかっていますが、問題は、2 つのイベントを発生させたくないということです。たとえば、ユーザーがピンチしたとき、ドラッグイベントが発生することはありません。また、ユーザーが 1 本の指をドラッグしたときに、タップ機能を起動させたくありません。

これは私がこれまでに持っているものです:

-(void)singleTap:(NSIndexPath *)event
{

}

-(void)doubleTapMethod:(id)event
{
    if(enableTap==NO){
        enableMove=YES;
        return;
    }

     NSLog(@"double tap with number of fingers = %i",TouchesCount); 
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{

    enableTap=YES;
    enableMove=NO;


    UITouch *touch = [[event allTouches] anyObject];
    CGPoint location = [touch locationInView:touch.view];

    TapCount = touch.tapCount;


    X=location.x;
    Y=location.y;

    NSData *data = [ @"SSSSS" dataUsingEncoding:NSUTF8StringEncoding];

    [udpSocket sendData:data toHost:IP port:Port withTimeout:-1 tag:1];


    switch (TapCount) {
        case 1:
            [self performSelector:@selector(singleTap:) withObject:nil afterDelay: delay];
            break;
        case 2:
            [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(singleTap:) object:nil];
            [self performSelector:@selector(doubleTapMethod:) withObject:nil afterDelay:delay];
            break;
        case 3:
            [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(doubleTapMethod:) object:nil];
            //[self performSelector:@selector(tripleTapMethod) withObject:nil afterDelay:delay];
            break;
        case 4:
            //[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(tripleTapMethod) object:nil];
            //[self quadrupleTap];
            break;
        default:
            break;
    }

}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{


    enableTap=NO;

    if(enableMove==NO)
        return;

    NSLog(@"touches moved %i",TapCount);
    UITouch *touch = [[event allTouches] anyObject];
    CGPoint location = [touch locationInView:touch.view];    

    NSData *data = [ [NSString stringWithFormat:@"%i,%i", ((int)location.x)-X,((int)location.y)-Y] dataUsingEncoding:NSUTF8StringEncoding];

    [udpSocket sendData:data toHost:IP port:Port withTimeout:-1 tag:1];


}

-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{

    TouchesCount = touches.count;
    return;//here


    NSData *data = [ @"EEEEEE" dataUsingEncoding:NSUTF8StringEncoding];
    [udpSocket sendData:data toHost:IP port:Port withTimeout:-1 tag:1];

}

多くの実装が欠けていることはわかっていますが、書き込みパスにいることを確認するまで作業を続けたくありません。たとえば、代わりに UITapGestureRecognizer クラスを使用して、次のようにする必要があります。

UITapGestureRecognizer * r = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewWasDoubleTapped:)];
[r setNumberOfTapsRequired:2];
[r setNumberOfTouchesRequired:2];
[[self view] addGestureRecognizer:r];
4

1 に答える 1

1

はい!この目的には、間違いなくジェスチャ レコグナイザーを使用する必要があります。元の投稿で言及したすべてのジェスチャ認識機能があります。

于 2012-05-02T18:57:06.893 に答える