IOS 滑动手势冲突 判断滑动方向

最近在写百度地图的时候发现地图和scrollView和tableView的滑动手势会冲突,这里以百度地图作为示例写一遍解决方法

首先遵循UIGestureRecognizerDelegate代理方法
然后在你需要禁止滑动的scrollView添加手势
// 给第一个tableView添加手势
UIGestureRecognizer *mainScrollVTap = [[UIGestureRecognizer alloc]init];
mainScrollVTap.delegate=self;
[scroAll addGestureRecognizer:mainScrollVTap];
// 给最底部的scrollview 添加手势
UIGestureRecognizer *mainScrollVTap = [[UIGestureRecognizer alloc]init];
mainScrollVTap.delegate=self;
[scroAll addGestureRecognizer:mainScrollVTap];
在地图上添加点击手势
_mapView = [[BMKMapView alloc]initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, PTTotalHeight/5*2)];
_mapView.userTrackingMode = BMKUserTrackingModeFollow;//设置定位的状态
_mapView.delegate = self;
_mapView.showsUserLocation = YES;//显示定位图层
[scroRoute addSubview:_mapView];
//给地图加手势以解决滑动冲突
UITapGestureRecognizer *provinceMapTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(provinceMapTapped)];
provinceMapTap.delegate = self;
[_mapView addGestureRecognizer:provinceMapTap];
最后实现手势代理方法判断出需要触发哪一个手势
#pragma mark 手势代理方法 ,判断触摸的是地图还是外层的view
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
    //判断如果是百度地图的view 既可以实现手势拖动 scrollview 的滚动关闭
    if ([gestureRecognizer.view isKindOfClass:[BMKMapView class]] ){
        scroAll.scrollEnabled = NO;
        scroRoute.scrollEnabled = NO;
        return YES;
    }else{
        scroAll.scrollEnabled = YES;
        scroRoute.scrollEnabled = YES;
        return NO;
    }
}
需要注意的一点是给地图添加了点击手势需要实现方法,不然会崩溃
-(void)provinceMapTapped{
}
演示效果
示例.gif

顺便整理一下如何判断scrollView的滑动方向

声明变量
@interface ViewController ()<UIScrollViewDelegate>
{
    UIScrollView *scro;
    float lastContentOffsetX;
    float lastContentOffsetY;
}
在scrollViewWillBeginDragging方法里记录开始前的X、Y值
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
    lastContentOffsetY = scrollView.contentOffset.y;
    lastContentOffsetX = scrollView.contentOffset.x;
}
在scrollViewDidScroll方法里判断滑动方向
-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if(scrollView.contentOffset.y>lastContentOffsetY){
        NSLog(@"向上滑动");
    }else if(scrollView.contentOffset.y<lastContentOffsetY){
        NSLog(@"向下滑动");
    }
    if(scrollView.contentOffset.x<lastContentOffsetX){
        NSLog(@"向左滑动");
    }else if(scrollView.contentOffset.x>lastContentOffsetX){
        NSLog(@"向右滑动");
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,222评论 4 61
  • 转载注明出处:http://www.jianshu.com/p/87a41b8c0dd0 前言 在Android开...
    王三的猫阿德阅读 29,111评论 43 85
  • 现在很多人都玩Cosplay,可是模仿的多是漫画中的人物,殊不知,汉服才是美到爆的服饰呀。优雅高贵的气质,迷人的韵...
    c0931d356885阅读 3,262评论 0 2
  • 苏轼(1037-1101),北宋文学家、书画家。字子瞻,又字和仲,号东坡居士。汉族,眉州眉山(今属四川)人。...
    曲亚轩阅读 2,144评论 1 1
  • 接下来的行程是清清农场。这里的主要亮点是绵羊秀和马术表演。我们这篇先来看一看绵羊秀。众所周知,羊向来是靠乖巧可爱温...
    信长工阅读 1,709评论 0 0