web-dev-qa-db-ja.com

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]]]];
51
Oscar Apeland

UIGestureRecognizerでlocationInView:メソッドを使用できます。ビューにnilを渡すと、このメソッドはウィンドウ内のタッチの位置を返します。

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

便利なデリゲートメソッドgestureRecognizer:shouldReceiveTouch:もあります。タップジェスチャのデリゲートをselfに実装および設定してください。

ジェスチャ認識エンジンへの参照を保持します。

@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;
}
85
MJN

Swiftの場合:

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

これを試して:

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

これにより、コンソールの各タップの座標が出力されます。

1
user3352358

Apple Docs say

UIGestureRecognizer

- (NSUInteger)numberOfTouches

受信者が保持するプライベート配列内のUITouchオブジェクトの数。

したがって、それらにアクセスしないでください。

ループ内でこのメソッドから返された値を使用して、locationOfTouch:inView:メソッドを使用して個々のタッチの場所を要求できます。

0
user1951992