放大时SwipeGesture无法正常工作

时间:2016-08-09 18:01:10

标签: ios objective-c uiscrollview uiimageview uiswipegesturerecognizer

我在UIScrollView中有一个SubView。在SubView中,我有一个带有多个按钮的图像。我有两个手指滑动手势编码,以便用户可以向上,向下,向左或向右滑动以将另一个视图弹出到导航控制器上。加载视图后,我可以轻松滑动并按预期执行。但是,当我放大或完全放大时,会忽略两个手指滑动手势。如果我很幸运,有时它会在放大/缩小时被识别,但我不能允许我的用户使用该行为。有人可以帮忙吗?谢谢。

1 个答案:

答案 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;
}