2013-05-17 5 views
34

Ich möchte den UITouch-Speicherort von meinem Tippen von UIGestureRecognizer abrufen, aber ich kann nicht herausfinden, wie man von der Dokumentation und anderen SO-Fragen sieht. Kann einer von euch mich führen?Wie bekomme ich den UITouch-Standort von 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]; 

} 

FIXED CODE HIER - DAS FEST AUCH INVERTED Y AXIS

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

Antwort

68

Sie die locationInView: Methode auf UIGestureRecognizer verwenden können. Wenn Sie für die Ansicht NULL übergeben, gibt diese Methode die Position der Berührung im Fenster zurück.

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

Es gibt auch eine hilfreiche Delegatmethode gestureRecognizer:shouldReceiveTouch:. Stellen Sie sicher, dass Sie den Delegierten Ihrer TAPH-Geste selbst implementieren und festlegen.

Behalten Sie einen Verweis auf die Gestenerkenner.

@property UITapGestureRecognizer *theTapRecognizer; 

Initiailze der Gestenerkenner

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

für Methoden delegieren Hören.

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

Ich brauche einen UITouch für meine 'CGPoint touchLocation = [_tileMap convertTouchToNodeSpace: locationOfTap];' Wo convertTouchToNodeSpace ein UITouch wandelt .. Kann dieser Code in dieser Weise verwendet werden? –

+0

Können Sie die 'convertTouchToNodeSpace:' Methode ändern, um einen CGPoint aufzunehmen? – MJN

+0

Ich kann nicht herausfinden, wo es definiert ist, hahaha –

1

Try this:

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

Dieser druckt die Koordinaten jedes Taps in der Konsole.

0

Apple Docs sagen

UIGestureRecognizer

- (NSUInteger)numberOfTouches 

Die Anzahl der Objekte in einer UITouch privaten Array durch den Empfänger gehalten.

Sie sollten also nicht auf sie zugreifen.

Mit dem von dieser Methode in einer Schleife zurückgegebenen Wert können Sie nach der Position einzelner Berührungen mit der Methode locationOfTouch:inView: fragen.

10

In Swift:

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