UIPanGestureRecognizer за границами

У меня есть этот код, который извлекает координаты объекта при панорамировании:

UITapGestureRecognizer *moveBuildingTap = [[UITapGestureRecognizer alloc]
                                           initWithTarget:self action:@selector(moveobject:)];

Содержимое метода moveobject:

CGPoint tapPoint=[recognizer locationOfTouch:0 inView:self.view];

Я использую это, чтобы изменить кадр - переместить его - изображение с использованием этих координат.

Однако при перетаскивании изображения, вызывающем действие uipangesturerecognizer, я обнаружил, что при перетаскивании его в самый низ я получаю сообщение об ошибке -[UIPanGestureRecognizer locationOfTouch:inView:]: индекс (0) за пределами (0).

Как я могу решить это исключение и запретить пользователю перетаскивать эту точку?

Спасибо


person H Bellamy    schedule 05.11.2012    source источник


Ответы (2)


Странно, что ваш метод moveobject: вызывается, хотя массив приватных касаний распознавателя жестов кажется пустым.

В любом случае, в целом, если вы не обрабатываете мультитач-жесты в распознавателе жестов, я бы предложил использовать [recognizer locationInView:], а не locationOfTouch:inView:.

Кстати:

Вы говорите о UIPanGestureRecognizer, в то время как в коде вы используете UITapGestureRecognizer.

Код, который я бы рекомендовал для обработки перетаскивания определенного представления, выглядит следующим образом:

//...
UIPanGestureRecognizer *panGR = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
[someView addGestureRecognizer:panGR];
//...

- (void)handlePan:(UIPanGestureRecognizer *)gr
{
    CGPoint translation = [gr translationInView:gr.view];
    gr.view.frame = CGRectOffset(gr.view.frame, translation.x, translation.y);
    [gr setTranslation:CGPointZero inView:gr.view];
}
person Tobi    schedule 05.11.2012

Вы должны проверить numberOfTouches в своем UIGestureRecognizer, например:

if (recognizer.numberOfTouches) {
      CGPoint tapPoint = [recognizer locationOfTouch:0 inView:self.view];
}
person Laszlo    schedule 24.04.2015