【问题标题】:SwipeGesture not working when zoomed inSwipeGesture 在放大时不起作用
【发布时间】:2016-08-09 18:01:09
【问题描述】:

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

【问题讨论】:

  • 你能分享你已经尝试过的代码吗?

标签: ios objective-c uiscrollview uiimageview uiswipegesturerecognizer


【解决方案1】:

我能够使用手势识别器委托方法 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;
}

【讨论】:

    猜你喜欢
    • 2014-06-13
    • 2012-06-13
    • 2011-10-23
    • 2018-12-15
    • 2019-06-09
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多