web-dev-qa-db-fra.com

Comment obtenir l'emplacement de l'UITouch auprès de UIGestureRecognizer

Je souhaite obtenir l'emplacement UIT de mon robinet auprès d'UIGestureRecognizer, mais je ne peux pas comprendre comment consulter à la fois la documentation et d'autres SO questions. L'un de vous peut me guider?).

- (void)handleTap:(UITapGestureRecognizer *)tapRecognizer
{
    CCLOG(@"Single tap");
    UITouch *locationOfTap = tapRecognizer; //This doesn't work

    CGPoint touchLocation = [_tileMap convertTouchToNodeSpace:locationOfTap];
    //convertTouchToNodeSpace requires UITouch

    [_cat moveToward:touchLocation];
}

CODE FIXE ICI - CELA FIXE AUSSI L'AXE Y INVERSÉ

CGPoint touchLocation = [[CCDirector sharedDirector] convertToGL:[self convertToNodeSpace:[tapRecognizer locationInView:[[CCDirector sharedDirector] openGLView]]]];
51
Oscar Apeland

Vous pouvez utiliser le locationInView: méthode sur UIGestureRecognizer. Si vous passez nil pour la vue, cette méthode renverra l'emplacement du contact dans la fenêtre.

- (void)handleTap:(UITapGestureRecognizer *)tapRecognizer
{
    CGPoint touchPoint = [tapRecognizer locationInView: _tileMap]
}

Il existe également une méthode de délégation utile gestureRecognizer:shouldReceiveTouch:. Assurez-vous simplement de mettre en œuvre et de définir le délégué de votre geste de toucher sur soi-même.

Gardez une référence à la reconnaissance de geste.

@property UITapGestureRecognizer *theTapRecognizer;

Initiailze la reconnaissance de geste

_theTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(someMethod:)];
_theTapRecognizer.delegate = self;
[someView addGestureRecognizer: _theTapRecognizer];

Écoutez les méthodes de délégué.

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    CGPoint touchLocation = [_tileMap convertTouchToNodeSpace: touch];
    // use your CGPoint
    return YES;
}
85
MJN

En rapide:

func handleFrontTap(gestureRecognizer: UITapGestureRecognizer) {
   print("tap working")
   if gestureRecognizer.state == UIGestureRecognizerState.Recognized
   { 
      print(gestureRecognizer.locationInView(gestureRecognizer.view))
   }
}
13
user3108511

Essaye ça:

-(void) didMoveToView:(SKView *)view{
    oneFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(oneTapDetected:)];
    oneFingerTap.numberOfTapsRequired=1;
    oneFingerTap.numberOfTouchesRequired=1;

    [view addGestureRecognizer:oneFingerTap];
}

-(void)oneTapDetected:(UITapGestureRecognizer *)recognizer{
    NSLog(@"one tap detec");
    tapPositionOneFingerTap = [oneFingerTap locationInView:self.view];
    NSLog(@"%f, %f",tapPositionOneFingerTap.x,tapPositionOneFingerTap.y);
}

Ceci imprime les coordonnées de chaque tap dans votre console.

1
user3352358

Apple Docs dire

UIGestureRecognizer

- (NSUInteger)numberOfTouches

Nombre d'objets UITouch dans un tableau privé géré par le destinataire.

Donc, vous ne devriez pas y accéder.

En utilisant la valeur renvoyée par cette méthode dans une boucle, vous pouvez demander l’emplacement des touches individuelles à l’aide de la touche locationOfTouch:inView: méthode.

0
user1951992