【问题标题】: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;
}