我目前与UIGestureRecognizers存在一些冲突,这些冲突导致一切都很好。我在屏幕上有几个正方形(UIView)让用户平移和捏(用于缩放视图)。我在主视图中添加了一个UIPinchGestureRecognizer,其中添加了正方形,以便我可以在焦点上缩放正方形。我还为每个方块添加了UIPanGestureRecognizers,以便它可以在屏幕中移动。当我的手指在其他方向上移动时,当我捏住缩放选定的方格时,问题就会出现。根据我的调试,似乎如果我的捏手指穿过非聚焦方块,他们就会吃掉可以抵消捏合手势的触摸。使用“[pan requireGestureRecognizerToFail:pinch]”给出夹点优先级但创建和发出,因为连续的声相识别器不再触发。我还尝试将UIPinchRecognizer直接添加到正方形但是可以工作,但是手势有限制在正方形的范围内,如果正方形缩小太多则不能正常工作。有没有解决的办法?我错过了什么?
答案 0 :(得分:3)
解决问题的一种方法是为所有UIGestureRecognizer设置一个公共委托(可能是此视图的UIViewController)。如果捏手势识别器处于“开始”或“已更改”状态(意味着它正在识别并处理捏合),该委托可以为gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer返回NO。这应该可以防止任何平移手势识别器在捏合手势期间进行触摸。
在界面文件中,您需要保存对捏合手势识别器的引用:
@interface MyViewController : UIViewController <UIGestureRecognizerDelegate> {
UIGestureRecognizer *pinchGestureRecognizer;
}
在实现中,请确保检查捏手势识别器的状态,而不是手势识别器的状态:
@implementation MyViewController
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
if(pinchGestureRecognizer.state == UIGestureRecognizerStateBegan ||
pinchGestureRecognizer.state == UIGestureRecognizerStateChanged)
{
return NO;
}
else
{
return YES;
}
}