iOS: отключить жест панорамирования, когда объекты перекрываются

У меня есть несколько объектов, перемещенных с помощью Pan Gesture. Теперь я хочу, чтобы объект постоянно переставал двигаться в следующих случаях:

  1. Он перекрывает определенный (стационарный, не подлежащий перемещению) объект или
  2. Он входит в определенный диапазон мест.

Я пытался остановить его, когда два объекта перекрываются, используя removeGestureRecogniser, но это не сработало.

- (IBAction)cowimagemove:(UIPanGestureRecognizer *)recognizer {

if (cowimage.center.x==stayimage.center.x) {
    [self removeGestureRecogniser];
    }
else {
    CGPoint translation = [recognizer translationInView:self.view];
    recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x,
                                         recognizer.view.center.y + translation.y);
    [recognizer setTranslation:CGPointMake(0, 0) inView:self.view];
    }
}

person m4Die    schedule 26.07.2012    source источник
comment
Спасибо всем. Кажется, корень проблемы в том, что я не знал, как использовать removeGestureRecogniser. Я не включил '@property(nonatomic,assign) UIGestureRecognizer *gestureRecogniser;' в представлении.h Еще раз спасибо!!   -  person m4Die    schedule 27.07.2012


Ответы (2)


Попробуйте поймать перекрытие в делегате UIGestureRecognizer.

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
   if ([self checkForOverlap:gestureRecognizer]) {
       return NO;
   } 
   return YES;

}

В вашем методе checkForOverlap вы используете объект распознавания жестов для проверки соответствующих точек и т. д. и возвращаете YES, если это так.

(Конечно, более короткая версия вышеизложенного будет

return ![self checkForOverlap:gestureRecognizer];

)

person Mundi    schedule 26.07.2012

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

[self removeGestureRecognizer: recognizer];

Одна из причин, по которой эти ссылки всегда передаются во всех методах делегата, заключается именно в том, что вы знаете, над каким объектом вы работаете...

Во всех случаях, когда я использовал пары addGestureRecognizer/removeGestureRecognizer, они работали без сбоев, так что будем надеяться, что и в вашем случае тоже!

С уважением, ноби

person virtualnobi    schedule 26.07.2012