解决 MMDrawerController 滑动侧抽屉失效 在首页有UIScrollView的情况下

前提准备:
- 集成一个MMDrawerController
- 重现这种状况

    /* 以下为集成一个MMDrawerController */
    HomeViewController *home = [[HomeViewController alloc] init];
    // 使用MMDrawerController
    LeftMenuViewController *leftVC = [[LeftMenuViewController alloc] init];
    self.drawerController = [[MMDrawerController alloc] initWithCenterViewController:home leftDrawerViewController:leftVC];
    // 展开宽度
    _drawerController.maximumLeftDrawerWidth = SRN_WIDTH * 0.8;
    // 打开手势
    [_drawerController setOpenDrawerGestureModeMask:MMOpenDrawerGestureModeAll];
    [_drawerController setCloseDrawerGestureModeMask:MMCloseDrawerGestureModeAll];
    self.window.rootViewController = _drawerController;

接下来添加三个控制器的View到主控器上

    UIScrollView *view = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, SRN_WIDTH, SRN_HEIGHT - HEIGHT)];
    view.contentSize = CGSizeMake(SRN_WIDTH * 3, 0);
    // 去掉滚动条
    view.showsVerticalScrollIndicator = NO;
    view.showsHorizontalScrollIndicator = NO;
    // 设置分页
    view.pagingEnabled = YES;
    // 设置代理
    view.delegate = self;
    // 去掉弹簧效果
    view.bounces = NO;

    CGFloat height = SRN_HEIGHT - 49;

    // 添加子视图
    MainViewController *main = [[MainViewController alloc] init];
    main.view.frame = CGRectMake(0, 0, SRN_WIDTH, SRN_HEIGHT - HEIGHT);
    main.view.height = height;
    [self addChildViewController:main];
    [view addSubview:main.view];

    BestHotViewController *hot = [[BestHotViewController alloc] init];
    hot.view.frame = CGRectMake(0, 0, SRN_WIDTH, SRN_HEIGHT - HEIGHT);
    hot.view.x = SRN_WIDTH;
    hot.view.height = height;
    [self addChildViewController:hot];
    [view addSubview:hot.view];

    CategoryViewController *cate = [[CategoryViewController alloc] init];
    cate.view.frame = CGRectMake(0, 0, SRN_WIDTH, SRN_HEIGHT - HEIGHT);
    cate.view.x = SRN_WIDTH * 2;
    cate.view.height = height;
    [self addChildViewController:cate];
    [view addSubview:cate.view];

    [self.view addSubview:view];
    self.scrollView = view;

失效

分析: MMDC 中也使用这个手势 UIPanGestureRecognizer, UIScrollView中手势拦截了 MMDC手势的生效.

解决办法:

@implementation XTScrollView

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
    if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
        UIPanGestureRecognizer *pan = (UIPanGestureRecognizer *)gestureRecognizer;
        if ([pan translationInView:self].x > 0.0f && self.contentOffset.x == 0.0f) {
            // 这里返回 NO
            return NO;
        }
    }
    return [super gestureRecognizerShouldBegin:gestureRecognizer];
}
@end

重新初始化ScrollView

    XTScrollView *view = [[XTScrollView alloc] initWithFrame:CGRectMake(0, 0, SRN_WIDTH, SRN_HEIGHT - HEIGHT)];

成功

最后感谢您的阅读, 如果感觉有帮助可以关注我 和我一起学习!

我是夏天, 暖暖的夏天
End

原文链接
文章取自我的博客 暖暖的夏天

可以关注我的订阅号 [夏天然后 ID: xt1005430006]

夏天然后

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值