How to get UITouch location from UIGestureRecognizer

后端 未结 4 745
天命终不由人
天命终不由人 2020-12-08 18:44

I want to get the UITouch location of my tap from UIGestureRecognizer, but I can not figure out how to from looking at both the documentation and other SO questions. Can one

相关标签:
4条回答
  • 2020-12-08 18:56

    Apple Docs say

    UIGestureRecognizer

    - (NSUInteger)numberOfTouches
    

    The number of UITouch objects in a private array maintained by the receiver.

    So you shouldn't access them.

    Using the value returned by this method in a loop, you can ask for the location of individual touches using the locationOfTouch:inView: method.

    0 讨论(0)
  • 2020-12-08 19:09

    In Swift:

    func handleFrontTap(gestureRecognizer: UITapGestureRecognizer) {
       print("tap working")
       if gestureRecognizer.state == UIGestureRecognizerState.Recognized
       { 
          print(gestureRecognizer.locationInView(gestureRecognizer.view))
       }
    }
    
    0 讨论(0)
  • 2020-12-08 19:12

    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.

    0 讨论(0)
  • 2020-12-08 19:18

    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;
    }
    
    0 讨论(0)
提交回复
热议问题