iOS:对象重叠时禁用平移手势
我使用Pan Gesture
移动了一些对象。 现在我想让对象在下列情况下永久停止移动 :
- 它重叠了一个特定的(静止的,不能被移动的)对象,或者
- 它进入一定范围的地点。
当两个对象重叠使用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