23

我试图捕捉一个手势,但它不起作用。这是我的代码:

UISwipeGestureRecognizer *recognizer;
    recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)];
    [recognizer setDirection:(UISwipeGestureRecognizerDirectionRight | UISwipeGestureRecognizerDirectionLeft)];
    [[self view] addGestureRecognizer:recognizer];
    [recognizer release]; 

-(void)handleSwipeFrom:(UISwipeGestureRecognizer *)recognizer {
    NSLog(@"get gesture");
    if (recognizer.direction == UISwipeGestureRecognizerDirectionRight) {
        NSLog(@"get gesture right");
    }
    if (recognizer.direction == UISwipeGestureRecognizerDirectionLeft) {
        NSLog(@"get gesture Left");
    }
}

它总是得到一个手势,但不识别方向。我也尝试过if(recognizer.direction){NSLog(@"get gesture");},它也有效,所以我不明白我在哪里犯了错误。

谢谢你的帮助。

4

4 回答 4

47

你没有UISwipeGestureRecognizer正确使用。它的方向始终是您设置的方向(在本例UISwipeGestureRecognizerDirectionRight | UISwipeGestureRecognizerDirectionLeft中为 3)。

如果要捕获可以区分的左右滑动,则必须为每个滑动设置单独的识别器。Apple 在他们的SimpleGestureRecognizers 示例中做到了这一点。

于 2011-03-16T07:59:09.287 回答
8

您所要做的只是更改添加手势识别器的代码。

UISwipeGestureRecognizer *leftRecognizer;
leftRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)];
[leftRecognizer setDirection: UISwipeGestureRecognizerDirectionLeft];
[[self view] addGestureRecognizer:leftRecognizer];
[leftRecognizer release];

UISwipeGestureRecognizer *rightRecognizer;
rightRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)];
[rightRecognizer setDirection: UISwipeGestureRecognizerDirectionRight];
[[self view] addGestureRecognizer:rightRecognizer];
[rightRecognizer release];  
于 2012-05-15T15:20:56.347 回答
1

UISwipe ...是iOS。但是对于 Cocoa,您可以-swipeWithEvent:在视图类中使用。请参阅以下文档:http: //developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/EventOverview/HandlingTouchEvents/HandlingTouchEvents.html#//apple_ref/doc/uid/10000060i-CH13-SW10

于 2011-12-29T09:54:57.027 回答
1

gypsicoder 和 paulbailey 的答案都是正确的。有关我的更详细的解决方案,请参阅:https ://stackoverflow.com/a/16810160/936957

于 2013-05-29T09:30:10.113 回答