解决UIScrollView和滑动返回手势的冲突

转载 2016年05月30日 13:23:42

解决UIScrollView和滑动返回手势的冲突原网址

项目中浏览图片时,是以一个scrollview横向来展示多张图片,但是由于滑动返回手势和scrollview的滑动返回手势冲突了,导致在浏览图片时,页面不再能够滑动返回。所以想办法解决。

由于项目里的滑动返回,是UIPanGestureRecognizer,而且在项目中,只有滑动屏幕的左边100个像素,UIPanGestureRecognizer才会起作用。UIScrollView的滑动手势也是UIPanGestureRecognizer。那在侧边滑动时,让UIScrollView的不响应事件就OK了嘛,首先想到了继承UIScrollView 重写下面的方法,让滑动侧边时scrollView不响应事件,根据响应者链,事件最终会传递给下方的滑动手势。 

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event     {
          if (point.x < 100) {
              return nil;
          } else {
              return [super hitTest:point withEvent:event];
          }
 }

OK,搞定测试一下,貌似没什么问题,滑动侧边可以返回,滑动非侧边绝对不会返回。问题这么容易就解决了?

由于项目中需求变化了,不仅需要浏览图片时可以滑动返回,在一个页面不同tab时,也需要滑动切换,滑动返回。那还不简单,只要滑动切换的scrollView的父类改为上面的类就好了。很快就修改完成了,滑动切换没问题,滑动返回没问题。但是页面最左边的按钮貌似点击不了了。。。终于发现问题,原来随意的一改,让在侧边操作时,scrollView不接受任何事件了,包括点击按钮也被忽略,看来这是个很严重,需要另外的解决办法。 
由于scrollView的滑动手势拦截了事件,那我重写scrollView中panGestureRecognizer的代理方法,让它不拦截就好了嘛。于是继承UIScrollView,重写下面的方法。 

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {

            if ([self panBack:gestureRecognizer]) {
                 return YES;
            }
            return NO;

        }


- (BOOL)panBack:(UIGestureRecognizer *)gestureRecognizer {

   if (gestureRecognizer == self.panGestureRecognizer) {
    UIPanGestureRecognizer *pan = (UIPanGestureRecognizer *)gestureRecognizer;
    CGPoint point = [pan translationInView:self];
    UIGestureRecognizerState state = gestureRecognizer.state;
    if (UIGestureRecognizerStateBegan == state || UIGestureRecognizerStatePossible == state) {
            CGPoint location = [gestureRecognizer locationInView:self];
        if (point.x > 0 && location.x < 90 && self.contentOffset.x <= 0) {
                 return YES;
             }
           }
         }
  return NO;

}

需要侧边滑动时 panBack 返回YES,这时候,我让scrollView的手势和页面的滑动返回手势共存,scrollView不拦截手势,那不就可以滑动返回了吗。好了,测试一下,可以滑动返回,但是滑动返回时,为什么scrollView也跟着在滑动呢,太影响美观了,看来还需要另外的办法,我又回到了第一种办法时的想法,让scrollView切换的时候相应panGesture,滑动返回的时候不响应,那重写scrollView中的另外一个panGestureRecognizer的代理方法。

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {

        if ([self panBack:gestureRecognizer]) {
            return NO;
        }
        return YES;

}

ok,测试一下,切换可以,滑动返回可以。看来在我的项目中,这么解决目前来说算是完美的方案。

TableViewCell的封装(显示不同内容)

效果图: 重点分析: 1. class的使用,设置class,可以实现不同控制器之间的跳转. 2. 思路分析 : 2.1. 首先配置数据模型,在控制器中设置数据调用设置类(模型)...

IOS UITableview 的Cell 封装

感觉不错的代码。收藏下。 #import "GDBookTableViewCell.h" #import "GDBook.h" @interface GDBookTableViewCell () ...
  • zz_mm
  • zz_mm
  • 2015年08月18日 11:46
  • 2146

uiscrollview_和_滑动返回冲突解决

解决UIScrollView和滑动返回手势的冲突项目中浏览图片时,是以一个scrollview横向来展示多张图片,但是由于滑动返回手势和scrollview的滑动返回手势冲突了,导致在浏览图片时,页面...
  • raopc
  • raopc
  • 2015年12月24日 15:13
  • 609

解决右滑返回手势和UIScrollView中的手势冲突

转载自http://www.cnblogs.com/lexingyu/p/3702742.html   【前情回顾】 去年的时候,写了这篇帖子iOS7滑动返回。文中提到,对于多页面结构的应用...

UIScrollView滑动与UITableView左滑删除冲突问题解决方案

今天在项目中遇到这样一个问题,当UIScrollView中包含UITableView时,要实现UIScrollView滑动的同时UITableView也能实现左滑删除功能,说白了就是互不干扰,你干你的...
  • JSON_6
  • JSON_6
  • 2017年05月02日 15:55
  • 1099

android中view手势滑动冲突的两种解决方法

android中view手势滑动冲突的解决方法,主要解决方法有两种,外部和内部拦截。有需要的可以参考下。 Android手势事件的冲突跟点击事件的分发过程息息相关,由三个重要的方法来共同完成,分别...

Android滑动和点击手势冲突解决办法

private OnTouchListener touchListener = new OnTouchListener() {@Overridepublic boolean onTouch(View ...

iOS开发,UISlider滑块不灵敏问题以及在UIScrollView上添加Slider造成手势冲突问题心得

最近在做项目时候有如下这样一个界面 1.png 这个页面涉及到视频播放拖动进度条的需求,测试那边提过来的bug是进度条滑块不够灵敏,交互的时候很难响应用户的操作.苦逼码农一枚,提了b...

【Android手势冲突】彻底解决RecyclerView与ScrollView滑动冲突问题,并实现RecyclerView悬停导航栏

在新一期的需求中,产品要求我们做出和美团某个页面类似的功能,即一个页面包含在scrollView中,上面一个部分放置一些常用的广告banner、宫格tab等,下面放置一个RecyclerView用于展...

【转】UIButton 在 UIScrollView 中的 高亮延迟 和 滑动冲突

最近做项目遇见一个问题:UIScrollView上有许多UIButton,要实现既能点击UIButton,又能滑动UIScrollView,这个实现没有问题,不需要做额外的touch管理,UIScro...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:解决UIScrollView和滑动返回手势的冲突
举报原因:
原因补充:

(最多只允许输入30个字)