解決 MMDrawerController 滑動側抽屜失效 在首頁有UIScrollView的情況下

分類:技術 時間:2016-10-25

前提準備:

  • 集成一個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 gt; 0.0f amp;amp; 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


Tags: UIScrollView

文章來源:http://www.jianshu.com/p/3c27c5f2748f


ads
ads

相關文章
ads

相關文章

ad