如何从UIGestureRecognizer得到UITouch位置(How to get UITou

2019-09-04 04:22发布

我想从我的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]]]];

Answer 1:

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

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

还有一个有用的委托方法gestureRecognizer:shouldReceiveTouch: 只要确保落实和你双击手势的委托设置为self。

保持对手势识别的参考。

@property UITapGestureRecognizer *theTapRecognizer;

Initiailze手势识别

_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;
}


Answer 2:

在斯威夫特:

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


Answer 3:

试试这个:

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

这将打印在控制台每个抽头的坐标。



Answer 4:

苹果文件说

UIGestureRecognizer

 - (NSUInteger)numberOfTouches 

UITouch对象的数目在由接收器维持的私有阵列

所以,你不应该访问它们。

使用通过在循环这个方法返回的值,你可以要求使用单独的触摸的位置locationOfTouch:inView:方法。



文章来源: How to get UITouch location from UIGestureRecognizer