How to get UITouch location from UIGestureRecognizer
You can use the locationInView:
method on UIGestureRecognizer. If you pass nil for the view, this method will return the location of the touch in the window.
- (void)handleTap:(UITapGestureRecognizer *)tapRecognizer{ CGPoint touchPoint = [tapRecognizer locationInView: _tileMap]}
There is also a helpful delegate method gestureRecognizer:shouldReceiveTouch:
. Just make sure to implement and set your tap gesture's delegate to self.
Keep a reference to the gesture recognizer.
@property UITapGestureRecognizer *theTapRecognizer;
Initiailze the gesture recognizer
_theTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(someMethod:)];_theTapRecognizer.delegate = self;[someView addGestureRecognizer: _theTapRecognizer];
Listen for delegate methods.
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{ CGPoint touchLocation = [_tileMap convertTouchToNodeSpace: touch]; // use your CGPoint return YES;}
In Swift:
func handleFrontTap(gestureRecognizer: UITapGestureRecognizer) { print("tap working") if gestureRecognizer.state == UIGestureRecognizerState.Recognized { print(gestureRecognizer.locationInView(gestureRecognizer.view)) }}
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);}
This prints the coordinates of each tap in your console.