Подтвердить что ты не робот

Как получить местоположение UITouch из UIGestureRecognizer

Я хочу получить местоположение UITouch моего крана из UIGestureRecognizer, но я не могу понять, как смотреть на документацию и другие вопросы 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 AXIS

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

Ответ 1

Вы можете использовать метод locationInView: в UIGestureRecognizer. Если вы передадите ноль для представления, этот метод вернет местоположение касания в окне.

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

Ответ 2

В Swift:

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

Ответ 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);
}

Это отображает координаты каждого крана в консоли.

Ответ 4

Apple Docs говорят

UIGestureRecognizer

- (NSUInteger)numberOfTouches

Число объектов UITouch в частном массиве, поддерживаемом получателем.

Поэтому вы не должны обращаться к ним.

Используя значение, возвращаемое этим методом в цикле, вы можете запросить местоположение отдельных касаний с помощью метода locationOfTouch:inView:.