美文网首页
MMDrawerController的手势冲突使用问题

MMDrawerController的手势冲突使用问题

作者: 破夕_____________ | 来源:发表于2017-06-22 09:11 被阅读584次

1.引入MMDrawerController第三方文件 可pods到本地

2.初始化控制器

   //1、初始化控制器

    UIViewController *centerVC = [[MainViewController alloc]init];
    
        UIViewController *leftVC = [[LeftViewController alloc]init];
        //2、初始化导航控制器
        UINavigationController *centerNvaVC = [[UINavigationController alloc]initWithRootViewController:centerVC];
        UINavigationController *leftNvaVC = [[UINavigationController alloc]initWithRootViewController:leftVC];
    
        //3、使用MMDrawerController
        self.drawerController = [[MMDrawerController alloc]initWithCenterViewController:centerNvaVC leftDrawerViewController:leftNvaVC rightDrawerViewController:nil];
    
        //4、设置打开/关闭抽屉的手势
        self.drawerController.openDrawerGestureModeMask = MMOpenDrawerGestureModeAll;
        self.drawerController.closeDrawerGestureModeMask =MMOpenDrawerGestureModeAll;
        //5、设置左右两边抽屉显示的多少
        self.drawerController.maximumLeftDrawerWidth = 200.0;
        //    self.drawerController.maximumRightDrawerWidth = 200.0;
    //6、初始化窗口、设置根控  制器、显示窗口
    self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
    
    [self.window setRootViewController:self.drawerController];
    [self.window makeKeyAndVisible];

3,在用到的ViewController里面设置

- (void) viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    
    self.navigationController.interactivePopGestureRecognizer.enabled = NO;
    //设置打开抽屉模式   这里要设置抽屉的打开和关闭,不能单一设置打开,不然就回不去了
    
    [self.mm_drawerController setOpenDrawerGestureModeMask:MMOpenDrawerGestureModeAll];
    [self.mm_drawerController setCloseDrawerGestureModeMask:MMCloseDrawerGestureModeAll];
    
}

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"ground"]];
    self.title = @"主页";
    
    //1、设置导航栏的按钮
    UIImage *Personal_center = [UIImage imageNamed:@"Group 3 Copy"];
    UIButton *LeftButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, Personal_center.size.width, Personal_center.size.width)];
    [LeftButton setBackgroundImage:Personal_center forState:UIControlStateNormal];
    LeftButton.layer.masksToBounds = YES;
    [LeftButton addTarget:self action:@selector(leftBtn) forControlEvents:UIControlEventTouchUpInside];

    UIBarButtonItem* leftBarButton = [[UIBarButtonItem alloc] initWithCustomView:LeftButton];

    self.navigationItem.leftBarButtonItem = leftBarButton;

//    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"Personal center"] style:UIBarButtonItemStylePlain target:self action:@selector(leftBtn)];
    
    //框架作者提供了创建UIBarButtonItem的方法
    //    self.navigationItem.leftBarButtonItem = [[MMDrawerBarButtonItem alloc]initWithTarget:self action:@selector(leftBtn)];
    //    self.navigationItem.rightBarButtonItem = [[MMDrawerBarButtonItem alloc]initWithTarget:self action:@selector(rightBtn)];
    
    
    //2、添加双击手势
    UITapGestureRecognizer * doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTap:)];
    //2.1、双击
    [doubleTap setNumberOfTapsRequired:2];
    [self.view addGestureRecognizer:doubleTap];
    
    //3、添加两个手指双击手势
    UITapGestureRecognizer * twoFingerDoubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(twoFingerDoubleTap:)];
    //3.1、双击
    [twoFingerDoubleTap setNumberOfTapsRequired:2];
    //3.2、两个手指  默认为一个
    [twoFingerDoubleTap setNumberOfTouchesRequired:2];
    [self.view addGestureRecognizer:twoFingerDoubleTap];
    
    
    //设置导航栏颜色
    [self.navigationController.navigationBar setBarTintColor:[UIColor blackColor]];
    
    //修改导航栏字体颜色
    
    [self.navigationController.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor],NSForegroundColorAttributeName,nil]];
    
    [[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor whiteColor]}];
    
//    创建首页视图
    [self createUI];
    
}
-(void)leftBtn{
    //这里的话是通过遍历循环拿到之前在AppDelegate中声明的那个MMDrawerController属性,然后判断是否为打开状态,如果是就关闭,否就是打开(初略解释,里面还有一些条件)6
    [self.mm_drawerController toggleDrawerSide:MMDrawerSideLeft animated:YES completion:nil];

}

/**
 *  添加点击手势  一个手指双击
 */
-(void)doubleTap:(UITapGestureRecognizer*)gesture{
    [self.mm_drawerController bouncePreviewForDrawerSide:MMDrawerSideLeft completion:nil];
}

/**
 *  添加点击手势  两个个手指双击
 */
-(void)twoFingerDoubleTap:(UITapGestureRecognizer*)gesture{
    [self.mm_drawerController bouncePreviewForDrawerSide:MMDrawerSideRight completion:nil];
}



-(void)viewDidDisappear:(BOOL)animated
{
    
    [super viewDidDisappear:animated];
    
    self.navigationController.interactivePopGestureRecognizer.enabled = YES;
    [self.mm_drawerController setOpenDrawerGestureModeMask:MMOpenDrawerGestureModeNone];
    [self.mm_drawerController setCloseDrawerGestureModeMask:MMCloseDrawerGestureModeNone];
}

在其他视图里面打开与MMDrawerController手势冲突的系统手势(滑动回到上一页)

继承自同一个RootViewController,可写在这里面

#import "MMDrawerController.h"
#import "UIViewController+MMDrawerController.h"
-(void)viewWillAppear:(BOOL)animated
{
    self.mm_drawerController.openDrawerGestureModeMask = MMOpenDrawerGestureModeNone;
    self.mm_drawerController.closeDrawerGestureModeMask = MMCloseDrawerGestureModeNone;
    self.navigationController.interactivePopGestureRecognizer.delegate = (id)self;
}

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
    return YES ;
}

这样就完美解决了MMDrawerController与系统手势冲突的问题了。

相关文章

网友评论

      本文标题:MMDrawerController的手势冲突使用问题

      本文链接:https://www.haomeiwen.com/subject/pymxcxtx.html