如何从UIGestureRecognizer获取UITouch位置

我想从UIGestureRecognizer获取UITouch的位置,但我无法弄清楚如何从文档和其他SO问题中查找。 你们能引导我吗?

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

固定代码在这里 – 这也是固定反转Y轴

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

您可以使用UIGestureRecognizer上的locationInView:方法。 如果您传递视图的nil,则此方法将返回窗口中的触摸位置。

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

还有一个有用的委托方法gestureRecognizer:shouldReceiveTouch: 只要确保实施并设置您的轻拍手势的代表自己。

保持对手势识别器的引用。

 @property UITapGestureRecognizer *theTapRecognizer; 

启动手势识别器

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

聆听委托方法。

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

在Swift中:

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

尝试这个:

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

这会打印控制台中每个水龙头的坐标。

苹果文件说

UIGestureRecognizer

 - (NSUInteger)numberOfTouches 

由接收者维护的私有arrays中的UITouch对象的数量。

所以你不应该访问它们。

在循环中使用此方法返回的值,可以使用locationOfTouch:inView:方法询问各个触摸的locationOfTouch:inView: