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

尝试捕捉UIGestureRecognizer委托中的重叠部分。

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

在您的checkForOverlap方法中,您使用手势识别器对象来testing相关点等,如果是这种情况,则返回YES。

(当然,上面的一个更短的版本将是

 return ![self checkForOverlap:gestureRecognizer]; 

因为你没有包含任何设置代码,这个答案有点像在黑暗中徘徊,但是碰到我的第一件事就是removeGestureRecognizer是一个需要参数的方法,也就是你想要删除的手势识别器。 所以第三行显示阅读

 [self removeGestureRecognizer: recognizer]; 

总是在所有委托方法中传递这些引用的一个原因恰恰就是 – 你知道你为哪个对象工作…

在所有使用addGestureRecognizer / removeGestureRecognizer对的情况下,它们都能正常工作,所以我们希望它们也能适用于您的情况!

问候,nobi