2013-05-17 12 views
34

Desidero ottenere la posizione UITouch del mio tocco da UIGestureRecognizer, ma non riesco a capire come guardare dalla documentazione e da altre domande su SO. Qualcuno di voi può guidarmi?Come ottenere la posizione UITouch da UIGestureRecognizer

- (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]; 

} 

codice fisso qui - QUESTO corregge anche INVERTITO ASSE Y

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

risposta

68

È possibile utilizzare il metodo locationInView: su UIGestureRecognizer. Se si passa nil per la vista, questo metodo restituirà la posizione del tocco nella finestra.

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

V'è anche un metodo delegato utile gestureRecognizer:shouldReceiveTouch:. Assicurati di implementare e impostare il delegato del gesto del tocco su se stesso.

Conservare un riferimento al rilevatore di gesti.

@property UITapGestureRecognizer *theTapRecognizer; 

Initiailze il gesto riconoscitore

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

Ascoltate metodi delegato.

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

Ho bisogno di un UITouch per il mio 'CGPoint touchLocation = [_tileMap convertTouchToNodeSpace: locationOfTap];' Dove convertTouchToNodeSpace converte un UITouch .. Può questo codice essere usato in quel modo? –

+0

Potresti semplicemente modificare il metodo 'convertTouchToNodeSpace:' per prendere un CGPoint? – MJN

+0

Non riesco a scoprire dove è definito il suo comando, hahaha –

1

Prova questo:

-(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); 
} 

Questo stampa le coordinate di ogni rubinetto nella vostra console.

0

Apple Docs dire

UIGestureRecognizer

- (NSUInteger)numberOfTouches 

Il numero di oggetti UITouch in una matrice privato mantenuto dal ricevitore.

Quindi non dovresti accedervi.

Utilizzando il valore restituito da questo metodo in un ciclo, è possibile chiedere la posizione dei singoli tocchi utilizzando il metodo locationOfTouch:inView:.

10

In Swift:

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