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];

}

И распознаватель, подобный этому

-(void)handleSwipeFrom:(UISwipeGestureRecognizer *)recognizer
{
printf("Guesture: %dn", recognizer.direction);
if (recognizer.direction == UISwipeGestureRecognizerDirectionLeft)
{
    printf("an");
    [self move: 'a'];
}
else if (recognizer.direction == UISwipeGestureRecognizerDirectionRight)
{
    printf("dn");
    [self move: 'd'];
}
else if (recognizer.direction == UISwipeGestureRecognizerDirectionUp)
{
    printf("wn");
    [self move: 'w'];
}
else if (recognizer.direction == UISwipeGestureRecognizerDirectionDown)
{
    printf("sn");
    [self move: 's'];
}
else if (recognizer.direction == (UISwipeGestureRecognizerDirectionRight | UISwipeGestureRecognizerDirectionUp))
{
    printf("yn");
    [self move: 'd'];
}
}

Проблема в том, что он никогда не обнаруживает направление вверх / вправо, кто-нибудь знает способ это исправить?

1 2

1 ответ:

Не так работает свойство direction. UISwipeGestureRecognizer распознает только свайпы в одном направлении за один раз. Вам нужно будет сделать что-то более сложное, включив UIPanGestureRecognizer и определив его направление по результату его работы.-translationInView: / -velocityInView: методы.