Как заставить два идентичных UISwipeGestureRecognizer работать одновременно в зависимости от местоположения касания?

В моем текущем проекте Sprite Kit я закодировал механику, в которой я использовал UISwipeGestureRecognizer для левого направления, которое применяется к двум узлам. Когда смахивание влево происходит на одной стороне экрана, перемещается один из узлов, а когда смахивание влево происходит на другой стороне экрана, перемещается другой узел. Однако я не могу найти способ заставить узлы двигаться одновременно; 2 свайпа влево не распознаются, хотя они находятся в разных местах экрана. Точно так же я также закодировал аналогичную механику, когда пользователь проводит пальцем вправо. Ниже мой код. Буду очень признателен за любую помощь. На данный момент только один узел может быть пропущен за раз, а не оба вместе, чего я и хотел бы.

    -(void)didMoveToView:(SKView *)view {
    UISwipeGestureRecognizer *leftSwipe1 = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(leftSwiped1:)];

[leftSwipe1 setDirection:UISwipeGestureRecognizerDirectionLeft];
[leftSwipe1 setNumberOfTouchesRequired:1];
[self.view addGestureRecognizer:leftSwipe1];

UISwipeGestureRecognizer *rightSwipe1 = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(rightSwiped1:)];

[rightSwipe1 setDirection:UISwipeGestureRecognizerDirectionRight];
[rightSwipe1 setNumberOfTouchesRequired:1];
[self.view addGestureRecognizer:rightSwipe1];

self.physicsWorld.gravity = CGVectorMake(0, -9.8);
self.physicsWorld.contactDelegate = self;
    }
    -(void)rightSwiped1:(UIGestureRecognizer *)gestureRecognizer {

CGPoint pt = [gestureRecognizer locationInView:self.view];
if(pt.x < (self.view.bounds.size.width/2))
{
    SKNode *person1 = [self childNodeWithName:@"person1"];
    SKAction *moveRight = [SKAction moveTo:CGPointMake(CGRectGetMidX(self.frame) - 80, CGRectGetMidY(self.frame) + 200) duration:0.2f];
    [person1 runAction:moveRight];
} else if (pt.x > (self.view.bounds.size.width/2)) {

    SKNode *person2 = [self childNodeWithName:@"person2"];
    SKAction *moveRight2 = [SKAction moveTo:CGPointMake(CGRectGetMidX(self.frame) + 400, CGRectGetMidY(self.frame) + 200) duration:0.2f];
    [person2 runAction:moveRight2];
}


    }
    -(void)leftSwiped1:(UIGestureRecognizer *)gestureRecognizer {
CGPoint pt = [gestureRecognizer locationInView:self.view];
if(pt.x < (self.view.bounds.size.width/2))
{
    SKNode *person1 = [self childNodeWithName:@"person1"];
    SKAction *moveLeft = [SKAction moveTo:CGPointMake(CGRectGetMidX(self.frame) - 400, CGRectGetMidY(self.frame) + 200) duration:0.2f];
    [person1 runAction:moveLeft];
} else if (pt.x > (self.view.bounds.size.width/2)) {

    SKNode *person2 = [self childNodeWithName:@"person2"];
SKAction *moveLeft2 = [SKAction moveTo:CGPointMake(CGRectGetMidX(self.frame) + 80, CGRectGetMidY(self.frame) + 200) duration:0.2f];
[person2 runAction:moveLeft2];
}
    }

person RT33    schedule 26.08.2015    source источник
comment
Почему бы вам не попробовать применить UISwipeGestureRecognizer непосредственно к SKNode?   -  person Jacopo Penzo    schedule 26.08.2015
comment
как бы я это сделал?   -  person RT33    schedule 26.08.2015


Ответы (2)


Это должно вам помочь

Сначала мы должны создать класс, реализующий протокол UIGestureRecognizerDelegate:

@interface TestGestureDelegate : NSObject

@реализация TestGestureDelegate

  • (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{ return YES; }

  • (BOOL) распознавание жестов: (UIGestureRecognizer *) распознавание жестов должно распознавать одновременно с распознаванием жестов: (UIGestureRecognizer *) другое распознавание жестов { return YES; }

  • (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer долженReceiveTouch:(UITouch *)touch{ return YES; }

Кроме того, это хороший источник информации о жесте.

person Grigori Jlavyan    schedule 12.09.2015
comment
Я реализовал именно этот код, он все равно не будет работать. Я не знаю, что я делаю неправильно - person RT33; 13.09.2015
comment
Можете ли вы привести пример, чтобы я мог проверить и сообщить вам о проблеме - person Grigori Jlavyan; 14.09.2015

Попробуйте реализовать этот метод:

- gestureRecognizer:shouldRecognizerSimultaneouslyWithGestureRecognizer:

Это предотвратит блокирование одного из ваших жестов другим.

Кроме того, убедитесь, что вы установили свой текущий ViewController, в котором будет реализация этого метода, в качестве делегата обоих ваших UIGestureRecognizers, чтобы этот метод действительно вызывался.

Надеюсь, это поможет. Удачи!

person Rony Rozen    schedule 26.08.2015