如何从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:
。