前提準備:
- 集成一個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