UISwipeGestureRecognizer对角滑动问题

phy*_*us9 3 iphone objective-c ios uiswipegesturerecognizer

好吧,我有一些代码向视图添加4个识别器,像这样

- (void)viewDidLoad
{
    [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib
    for(int d = UISwipeGestureRecognizerDirectionRight; d <= UISwipeGestureRecognizerDirectionDown; d = d*2) {
         UISwipeGestureRecognizer *sgr = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)];
         sgr.direction = d;
    [self.view addGestureRecognizer:sgr];
    }
    [self restore];
    [self populate];
    [self displaymap];
Run Code Online (Sandbox Code Playgroud)

}

和这样的识别器

-(void)handleSwipeFrom:(UISwipeGestureRecognizer *)recognizer
{
printf("Guesture: %d\n", recognizer.direction);
if (recognizer.direction == UISwipeGestureRecognizerDirectionLeft)
{
    printf("a\n");
    [self move: 'a'];
}
else if (recognizer.direction == UISwipeGestureRecognizerDirectionRight)
{
    printf("d\n");
    [self move: 'd'];
}
else if (recognizer.direction == UISwipeGestureRecognizerDirectionUp)
{
    printf("w\n");
    [self move: 'w'];
}
else if (recognizer.direction == UISwipeGestureRecognizerDirectionDown)
{
    printf("s\n");
    [self move: 's'];
}
else if (recognizer.direction == (UISwipeGestureRecognizerDirectionRight | UISwipeGestureRecognizerDirectionUp))
{
    printf("y\n");
    [self move: 'd'];
}
}
Run Code Online (Sandbox Code Playgroud)

问题是,它永远不会检测到| 正确的方向,有人知道解决此问题的方法吗?

Noa*_*oon 5

这不是direction财产的运作方式。UISwipeGestureRecognizer一次只能识别一个方向的滑动。您需要做一些更复杂的事情,包括UIPanGestureRecognizer并根据其-translationInView:/ -velocityInView:方法的结果确定其方向。