Как да накарам два идентични 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

@implementation TestGestureDelegate

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

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

  • (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(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, в който ще бъде реализацията на този метод, като делегат и на двата ви UIGestureRecognizer, така че този метод действително да бъде извикан.

Надявам се това да помогне. Късмет!

person Rony Rozen    schedule 26.08.2015