2015-08-26 1 views
1

Dans mon projet Sprite Kit actuel, j'ai codé un mécanicien où j'ai utilisé un UISwipeGestureRecognizer pour la direction gauche qui est appliquée à deux nœuds. Lorsqu'un balayage à gauche se produit sur un côté de l'écran, l'un des nœuds se déplace et lorsqu'un balayage à gauche se produit de l'autre côté de l'écran, l'autre nœud se déplace. Cependant, je ne peux pas trouver un moyen de faire bouger les nœuds en même temps; 2 balayages à gauche ne sont pas reconnus bien qu'ils se trouvent à des endroits différents sur l'écran. De même, j'ai également codé un mécanisme similaire pour quand l'utilisateur balaye vers la droite. Voici mon code. J'apprécierais grandement toute aide. A partir de maintenant, un seul nœud peut être swipes à un moment, pas les deux ensemble, ce qui est ce que je voudraisComment obtenir deux UISwipeGestureRecognizers identiques pour travailler simultanément en fonction de l'emplacement du toucher?

-(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]; 
} 
    } 
+0

Pourquoi vous essayez de ne pas appliquer la UISwipeGestureRecognizer directement au SKNode? –

+0

comment ferais-je cela? – RT33

Répondre

0

Essayez la mise en œuvre de cette méthode:

- gestureRecognizer:shouldRecognizerSimultaneouslyWithGestureRecognizer: 

Il empêchera un de vos gestes de bloquer l'autre. En outre, assurez-vous que vous définissez votre ViewController actuel, dans lequel l'implémentation de cette méthode sera, en tant que délégué de vos deux UIGestureRecognizers, afin que cette méthode soit effectivement appelée.

J'espère que cela aide. Bonne chance!

1

Ce doit être une vous aider

Au début, nous devrions créer la classe, qui implémente le protocole UIGestureRecognizerDelegate:

@interface TestGestureDelegate: NSObject

@implementation TestGestureDelegate

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

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

  • (BOOL) gestureRecognizer: (UIGestureRecognizer *) gestureRecognizer shouldReceiveTouch: (UITouch *) touche { return YES; }

Aussi c'est bonne source pour apprendre, Gesture

+0

J'ai implémenté ce code exactement, ça ne marchera toujours pas. Je ne sais pas ce que je fais mal – RT33

+0

Pouvez-vous donner un exemple afin que je puisse vérifier et vous faire part de problèmes –