iOS-UIScrollView滑动与手势冲突

这是scrollView左右滑动与侧滑手势冲突解决方法。
其实就是判断手势是否继续向下传递。

1.当然要自定义一个UIScrollView,在CustomScrollView的手势代理方法里实现自己的逻辑

#import "CustomScrollView.h"


@interface CustomScrollView()

@property(nonatomic,assign)BOOL isMoveRight;

@end

@implementation CustomScrollView


//1返回值是返回是否生效。此方法在gesture recognizer视图转出UIGestureRecognizerStatePossible状态时调用,如果返回NO,则转换到UIGestureRecognizerStateFailed;如果返回YES,则继续识别触摸序列
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{

    //滑动速度
    CGPoint velocity = [(UIPanGestureRecognizer *)gestureRecognizer velocityInView:self];
    
    CGPoint location = [gestureRecognizer locationInView:self];
    
    NSLog(@"velocity.x:%f----location.x:%d",velocity.x,(int)location.x%(int)[UIScreen mainScreen].bounds.size.width);
    
    //x方向速度>0为右滑动,反之为左滑动
    if (velocity.x > 0) {
        
        self.isMoveRight = YES;
        
    }else{
        
        self.isMoveRight = NO;
    }
    
    return YES;

}



//2
//此方法返回YES时,手势事件会一直往下传递(允许多手势触发),不论当前层次是否对该事件进行响应。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    
    
    UIScrollView * scrollvire = (UIScrollView *)gestureRecognizer.view;
    
    //根据contentOffset.x 与 滑动方向 来判断手势是否向下传递
    if (scrollvire.contentOffset.x == 0 && self.isMoveRight == YES) {
        
        return YES;
    }
    
    return NO;
   
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,229评论 4 61
  • 在成长的过程中,我逐渐意识到最好的回答莫过于:我的感受,与你相同。但是同时我并不认为在这诺大的地球上会有人能真的完...
    半痕阅读 558评论 0 0
  • 1. 今天,我很不高兴,因为我在一位朋友身上浪费了很多时间。 对于时间的流逝,我一般会使用两个不同的词语去定义,一...
    顾一宸阅读 2,988评论 34 104