UIPanGestureRecognizer dans SKScene

J'ai expérimenté avec UIGestureRecognizers et le nouveau SKScene/SKNode's dans SpriteKit . J'ai eu un problème, et j'ai failli le réparer, mais je suis confus sur une chose. Essentiellement, j'ai un reconnaisseur de mouvement de casserole qui permet à l'user de faire glisser un sprite sur l'écran.

Le seul problème que j'ai, c'est qu'il faut UNE tape pour initialiser le geste de panoramique, et seulement sur la deuxième tape sur cela fonctionne correctement. Je pense que c'est parce que mon geste panoramique est initialisé en touchesBegan . Cependant, je ne sais pas où mettre d'autres choses puisque l'initialiser dans la méthode initWithSize de initWithSize empêché le reconnaissance de mouvement de fonctionner.

 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { if (!self.pan) { self.pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(dragPlayer:)]; self.pan.minimumNumberOfTouches = 1; self.pan.delegate = self; [self.view addGestureRecognizer:self.pan]; } } -(void)dragPlayer: (UIPanGestureRecognizer *)gesture { CGPoint trans = [gesture translationInView:self.view]; SKAction *moveAction = [SKAction moveByX:trans.xy:-trans.y duration:0]; [self.player runAction:move]; [gesture setTranslation:CGPointMake(0, 0) inView:self.view]; } 

C'est parce que vous avez ajouté le geste dans les contacts a commencé, de sorte que le geste n'existe pas jusqu'à ce que l'écran a été touché au less une fois. De plus, je vérifierais que vous utilisez effectivement initWithSize: en tant qu'initialisateur, car vous ne devriez pas avoir de problème à append le geste là-bas.

Une autre option consiste à déplacer le code pour append le geste dans -[SKScene didMovetoView:] qui est appelé immédiatement après la présentation de la scène. Plus d'infos dans les docs .

 - (void)didMoveToView:(SKView *)view { [super didMoveToView:view]; // add gesture here! } 

Ceci est mon premier message posté! Espérant ne pas trébucher sur mes propres orteils …

Salut les gars, donc j'avais un problème avec un UISwipeGestureRecognizer ne fonctionne pas. Je l'initialisais dans ma méthode initWithSize donc basé sur ce post je l'ai déplacé à ma méthode didMoveToView. Maintenant cela fonctionne (merci 0x7fffffff). Tout ce que j'ai fait, c'est couper les deux lignes suivantes d'une méthode et les coller dans l'autre.

 _warpGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(warpToNextLevel:)]; [self.view addGestureRecognizer:_warpGesture]; 

Dans mon "enquête" je suis tombé sur userInteractionEnabled et j'ai essayé de le définir sur YES dans ma méthode initWithSize …

 self.view.userInteractionEnabled = YES; NSLog(@"User interaction enabled %s", self.view.userInteractionEnabled ? "Yes" : "No"); 

Cela se connecterait NON même si je l'aurais simplement réglé sur OUI. Une enquête plus poussée a révélé que si je n'essaie pas de définir manuellement userInteractionEnabled, alors NO est activé pendant initWithSize (je ne peux pas changer cela si je le souhaite) et est automatiquement défini sur YES lorsque je suis dans didMoveToView.

Tout cela me semble pertinent, mais j'aimerais que quelqu'un d'éclairé explique ce qui se passe ici. Merci!