遇到这样一个场景,本身页面vc.view添加了全屏侧滑返回手势,
但是页面中顶部有一个横向滚动的collectionView, 这个时候,我们
如果在页面总滑动横向滚动的collectionView的时候,就会执行横向collectionView的滚动,从而不执行侧滑返回的手势,这是我们不想要的结果,我们想要达到的效果是:如果我们开始滑动横向collectionView的时候,collectionView没有滑动到最左边,要正常的滑动横向collectionView,如果我们开始滚动的时候,collectionView已经滑动到最左边了,则我们希望响应侧滑手势,这样就达到了解决手势冲突的效果了
解决方案如下,自定义横向滚动collectionView类,重写手势代理方法
主要代码如下, 思路就是通过gestureRecognizerShouldBegin 方法
控制手势是否开始响应
- (BOOL)isPanBackAction:(UIGestureRecognizer *)gestureRecognizer
{//在最左边的时候 && 是pan手势,&& 手势往右拖拽if (self.contentOffset.x == - self.contentInset.left) {if (gestureRecognizer == self.panGestureRecognizer) {//根据速度判断拖动的方向CGPoint velocity = [self.panGestureRecognizer velocityInView:self.panGestureRecognizer.view];if (velocity.x > 0) {return YES;}}}return NO;
}- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{if ([self isPanBackAction:gestureRecognizer]) {return NO;}return YES;
}