0

我有一些使用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];
    }
}
4

2 回答 2

1

尝试在 UIGestureRecognizer Delegate 中捕捉重叠。

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

}

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

(当然,上述内容的较短版本是

return ![self checkForOverlap:gestureRecognizer];

)

于 2012-07-26T11:24:24.490 回答
0

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

[self removeGestureRecognizer: recognizer];

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

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

问候,诺比

于 2012-07-26T11:07:56.570 回答