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 Delegate中捕捉重叠。

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

checkForOverlap方法中,您使用手势识别器对象来测试相关点等,如果是这样,则返回YES。

(当然,上面的较短版本是

return ![self checkForOverlap:gestureRecognizer];

)

由于您没有包含任何设置代码,这个答案有点像在黑暗中摸索,但我首先想到的是removeGestureRecognizer是一个需要参数的方法,即您想要删除的手势识别器。所以第三行显示读取

[self removeGestureRecognizer: recognizer];

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

在我使用addGestureRecognizer/removeGestureIdentifizer对的所有情况下,它们都能顺利工作,所以我们希望它们在您的情况下也能如此!

此致,nobi

最新更新