iOS:当对象重叠时禁用平移手势

时间:2012-07-26 10:25:50

标签: ios gesture pan

我使用Pan Gesture移动了一些对象。现在我希望对象永久停止

  1. 它与特定的(静止的,不能移动的)物体重叠, 或
  2. 进入一定范围的地点。
  3. 我试图在使用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];
        }
    }
    

2 个答案:

答案 0 :(得分:1)

尝试捕获UIGestureRecognizer委托中的重叠。

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

}

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

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

return ![self checkForOverlap:gestureRecognizer];

答案 1 :(得分:0)

由于你没有包含任何设置代码,这个答案有点像在黑暗中探讨,但第一件事就是removeGestureRecognizer是一个需要参数的方法,即你想要的手势识别器去除。所以第3行显示为

[self removeGestureRecognizer: recognizer];

总是在所有委托方法中传递这些引用的一个原因正是 - 你知道你工作的对象是什么......

在我使用addGestureRecognizer / removeGestureRecognizer对的所有情况下,它们都能很顺利地运行,所以我们希望它们也适用于您的情况!

问候,nobi