MMDrawerControllerのジェスチャー競合使用の問題
5818 ワード
1.MMDrawerControllerサードパーティファイルをローカルにpodsする
2.コントローラの初期化
3、使用したViewControllerで設定
MMDrawerControllerジェスチャーと競合するシステムジェスチャーを別のビューで開く(前のページに戻る)
同じRootViewControllerから継承され、ここに書くことができます.
これでMMDrawerControllerがシステムジェスチャーと衝突する問題を完璧に解決しました.
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がシステムジェスチャーと衝突する問題を完璧に解決しました.