我在UIScrollView中有一个SubView。在SubView中,我有一个带有多个按钮的图像。我有两个手指滑动手势编码,以便用户可以向上,向下,向左或向右滑动以将另一个视图弹出到导航控制器上。加载视图后,我可以轻松滑动并按预期执行。但是,当我放大或完全放大时,会忽略两个手指滑动手势。如果我很幸运,有时它会在放大/缩小时被识别,但我不能允许我的用户使用该行为。有人可以帮忙吗?谢谢。
答案 0 :(得分:0)
我能够使用Gesture识别器委托方法requireGestureRecognizerToFail来解决这个问题。我需要在所有方向上进行两次手指滑动。我首先创建了一个平移手势识别器,并设置了适当的最小和最大触摸量。您必须将平移手势的委托设置为self,并确保将requireGestureRecognizerToFail设置为每个轻扫手势。不要忘记在shouldRecognizeSimultaneouslyWithGestureRecognizer中传递滑动手势集合。
- (void)viewDidLoad
{
[super viewDidLoad];
scrollView.contentSize = CGSizeMake(image.frame.size.width, image.frame.size.height);
scrollView.maximumZoomScale = 4;
scrollView.minimumZoomScale = 1;
scrollView.delegate = self;
UIPanGestureRecognizer *TwoFingerPanGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(HandlePanGesture:)];
TwoFingerPanGesture.minimumNumberOfTouches=2;
TwoFingerPanGesture.maximumNumberOfTouches=2;
[TwoFingerPanGesture setDelegate:self];
[scrollView addGestureRecognizer:TwoFingerPanGesture];
UISwipeGestureRecognizer *TwoFingerSwipeDownGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(HandleSwipeGesture:)];
TwoFingerSwipeDownGesture.direction = UISwipeGestureRecognizerDirectionDown;
TwoFingerSwipeDownGesture.numberOfTouchesRequired = 2 ;
[TwoFingerPanGesture requireGestureRecognizerToFail:TwoFingerSwipeDownGesture];
[scrollView addGestureRecognizer:TwoFingerSwipeDownGesture];
UISwipeGestureRecognizer *TwoFingerSwipeUpGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(HandleSwipeGesture:)];
TwoFingerSwipeUpGesture.direction = UISwipeGestureRecognizerDirectionUp;
TwoFingerSwipeUpGesture.numberOfTouchesRequired = 2;
[TwoFingerPanGesture requireGestureRecognizerToFail:TwoFingerSwipeUpGesture];
[scrollView addGestureRecognizer:TwoFingerSwipeUpGesture];
UISwipeGestureRecognizer *TwoFingerSwipeLeftGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(HandleSwipeGesture:)];
TwoFingerSwipeLeftGesture.direction = UISwipeGestureRecognizerDirectionLeft;
TwoFingerSwipeLeftGesture.numberOfTouchesRequired = 2;
[TwoFingerPanGesture requireGestureRecognizerToFail:TwoFingerSwipeLeftGesture];
[scrollView addGestureRecognizer:TwoFingerSwipeLeftGesture];
UISwipeGestureRecognizer *TwoFingerSwipeRightGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(HandleSwipeGesture:)];
TwoFingerSwipeRightGesture.direction = UISwipeGestureRecognizerDirectionRight;
TwoFingerSwipeRightGesture.numberOfTouchesRequired = 2;
[TwoFingerPanGesture requireGestureRecognizerToFail:TwoFingerSwipeRightGesture];
[scrollView addGestureRecognizer:TwoFingerSwipeRightGesture];
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
// Either just return YES to allow your cell's gesture recognizer
// to work simultaneously with all other recognizers:
//return YES;
// Or you can decide whether your cell's pan gesture recognizer should
// recognize simultaneously with otherGestureRecognizer. For example,
// you could get a reference to your collection view's panGestureRecognizer
// and only return YES if otherGestureRecognizer is equal to that recognizer:
return otherGestureRecognizer == scrollView.gestureRecognizers;
}