当我向UIScrollView添加A UIPangesturerecognizer时,滚动被禁用

我有一个滚动视图,我想让它在完成平移后消失。 它工作正常并且在平移时,scrollview消失但问题是现在我无法滚动内容。

[UIView animateWithDuration:0.2 delay:0.2 options: UIViewAnimationCurveLinear animations:^{ slideView.frame=CGRectMake(268, 0, 500, 950); curtain.frame=CGRectMake(0, 0, 268, 950); curtain.backgroundColor=[[UIColor alloc]initWithRed:0 green:0 blue:0 alpha:0.6]; [self.view addSubview:slideView]; [self.view addSubview:curtain]; } completion:^(BOOL finished){ NSLog(@"Done!"); }]; 

这就是我如何让我的uiscrollview出现(slideview是scrollview)。然后我添加了一个pangesturerecognizer.All工作正常但滚动被禁用。 (panImage再次隐藏了我的幻灯片。)如何进行滚动工作。

 [slideView addGestureRecognizer:panImage]; 

UIScrollView有自己的平移手势识别器,可以控制滚动。 通过添加另一个平移手势识别器,您可以阻止滚动视图自己的平移手势识别器工作。

有很多方法可以解决这个问题,但是如果你能够解释系统在用户试图解除滚动视图的时候应该知道什么以及当他想要滚动时,它会很有用,因为你想要一个泛手势做两件事。

例如,您可以设置两个手势识别器的gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:以允许识别器同时操作(通过覆盖gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:方法)。 您可以使每个手势识别器需要不同数量的触摸(通过设置minimumNumberOfTouchesmaximumNumberOfTouches属性)。 您可以使用UISwipeGestureRecognizer识别关闭手势。 您可以通过覆盖滚动视图委托的scrollViewDidScroll:方法来检测用户何时尝试滚动滚动视图的左边缘。

您可以手动设置panGestureRecognizers的优先级。 这就是我解决同样问题的方法:在委托(BOOL)中,gestureRecognizerShouldBegin:如果它应该返回YES,我在scrollView中进行了滚动禁用。 在我的panGestureRecognizer选择器的开头,我启用了滚动function。

在此委托中,您可以创建panGestureRecognizer的条件以启用这种方式,当且仅当您希望它具有主要优先级时才会起作用。

Swift方法,
需要将UIGestureRecognizerDelegate添加到您的类:

 class ViewController: UIViewController, UIGestureRecognizerDelegate { 

需要将其委托设置为自己:

 override func viewDidLoad() { super.viewDidLoad() var scrollView = UIScrollView(frame: self.view.frame) scrollView.delegate = self } 

在您的类方法中将此部分添加到活动的同时手势:

 func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool { return true }