用MMDrawerController实现侧滑
来源:互联网 发布:js对象深拷贝 编辑:程序博客网 时间:2024/06/09 16:39
我这里使用的是cocoapods来安装的MMDrawerController库,细节不再详述。
CenterViewController
在加载本视图控制器的时候,由于其它视图控制器的切换可能会关闭 通过手势滑动打开抽屉的模式,因此需要设置一下:
-(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; [self.mm_drawerController setOpenDrawerGestureModeMask:MMOpenDrawerGestureModeAll];}
- 首先给导航栏添加按钮
UIBarButtonItem* leftBarBtnItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(pressLeftBtn)]; self.navigationItem.leftBarButtonItem = leftBarBtnItem; UIBarButtonItem* rightBarBtnItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemOrganize target:self action:@selector(pressRightBtn)]; self.navigationItem.rightBarButtonItem = rightBarBtnItem;
- 添加双击手势
UITapGestureRecognizer* doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTap:)]; //单手指双击 [doubleTap setNumberOfTapsRequired:2]; [self.view addGestureRecognizer:doubleTap]; //双手指双击 UITapGestureRecognizer * twoFingerDoubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(twoFingerDoubleTap:)]; [twoFingerDoubleTap setNumberOfTapsRequired:2]; //两个手指 默认为一个 [twoFingerDoubleTap setNumberOfTouchesRequired:2]; [self.view addGestureRecognizer:twoFingerDoubleTap];
- 实现按钮的事件函数
-(void)pressLeftBtn{ //self.mm_drawerController通过遍历循环拿到之前在AppDelegate中声明的那个MMDrawerController属性,然后判断是否为打开状态,如果是就关闭,否就是打开 [self.mm_drawerController toggleDrawerSide:MMDrawerSideLeft animated:YES completion:nil];}-(void)pressRightBtn{ [self.mm_drawerController toggleDrawerSide:MMDrawerSideRight 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];}
LeftViewController | RightViewController
- 实现
UITableViewDataSource
、UITableViewDelegate
的相关协议函数 - 当选中tableView的cell后,跳转到
ShowViewControll
视图控制器中
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ LitterLShowViewController *showVC = [[LitterLShowViewController alloc]init]; showVC.title = [NSString stringWithFormat:@"Left-Demo%ld",indexPath.row]; //拿到我们的LitterLCenterViewController,让它去push UINavigationController* nav = (UINavigationController*)self.mm_drawerController.centerViewController; [nav pushViewController:showVC animated:NO]; //当我们push成功之后,关闭我们的抽屉 [self.mm_drawerController closeDrawerAnimated:YES completion:^(BOOL finished) { //设置打开抽屉模式为MMOpenDrawerGestureModeNone,也就是没有任何效果。 [self.mm_drawerController setOpenDrawerGestureModeMask:MMOpenDrawerGestureModeNone]; }];}
需要注意的是,push成功之后,必须要关闭掉我们的抽屉效果。否则,显示ShowViewController的时候仍然是抽屉的样式
ShowViewController
在该视图控制器中只设置了背景色为白色。
选中cell push进入ShowViewController之后,当你轻轻往右滑动的时候 其实它已经加载了centerViewController中的viewWillAppear这个方法,这个方法打开了通过手势滑动打开抽屉的模式 ,因此导致没有回到centerViewController,而显示的是抽屉模式。你在ShowViewController的viewWillAppear这个方法中加上关闭通过手势滑动打开抽屉的模式就可以了
AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. //1、初始化控制器 UIViewController* centerVC = [[LitterLCenterViewController alloc]init]; UIViewController* leftVC = [[LitterLLeftViewController alloc]init]; UIViewController* rightVC = [[LitterLRightViewController alloc]init]; //2、初始化导航控制器 UINavigationController* centerNvaVC = [[UINavigationController alloc]initWithRootViewController:centerVC]; UINavigationController* leftNvaVC = [[UINavigationController alloc]initWithRootViewController:leftVC]; UINavigationController* rightNvaVC = [[UINavigationController alloc]initWithRootViewController:rightVC]; //3、使用MMDrawerController self.drawerController = [[MMDrawerController alloc]initWithCenterViewController:centerNvaVC leftDrawerViewController:leftNvaVC rightDrawerViewController:rightNvaVC]; //4、设置打开/关闭抽屉的手势 self.drawerController.openDrawerGestureModeMask = MMOpenDrawerGestureModeAll; self.drawerController.closeDrawerGestureModeMask =MMCloseDrawerGestureModeAll; //5、设置左右两边抽屉显示的多少 self.drawerController.maximumLeftDrawerWidth = 300.0; self.drawerController.maximumRightDrawerWidth = 200.0; //6、初始化窗口、设置根控制器、显示窗口 self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds]; [self.window setRootViewController:self.drawerController]; [self.window makeKeyAndVisible]; return YES;}
总体上大致流程就是如此了!
完整项目
转载自 http://www.jianshu.com/p/9e55cbf7d5ab
阅读全文
0 0
- 用MMDrawerController实现侧滑
- MMDrawerController 类库实现iOS侧栏效果
- MMDrawerController
- 侧滑抽屉MMDrawerController自定义侧滑手势
- iOS分组通讯录效果+侧滑菜单(MMDrawerController)
- MMDrawerController,最简代码实现抽屉效果
- Swift使用MMDrawerController框架打造通用侧滑抽屉效果模版
- MMDrawerController第三方抽屉裤 如何打开和关闭侧滑
- iOS MMDrawerController侧滑菜单与中心视图手势冲突问题的解决方案
- iOS MMDrawerController侧滑菜单与中心视图手势冲突问题的解决方案
- 网易用的抽屉式导航MMDrawerController
- iOS中 超简单抽屉效果(MMDrawerController)的实现
- ios——(MMDrawerController)抽屉的实现
- iOS中 简单抽屉效果(MMDrawerController)的实现
- iOS中 超简单抽屉效果(MMDrawerController)的实现
- 使用MMDrawerController以TabBarController为中心视图实现抽屉效果
- iOS MMDrawerController侧滑菜单与中心视图手势冲突问题的解决方案(续--点击可收起抽屉)
- 入门 MMDrawerController
- 动态规划问题探究及其Java实现
- 摄像机坐标系
- dubbo——广播方式和zoomkeeper方式
- C语言的整型溢出问题 int、long、long long取值范围 最大最小值
- boost 之property_tree操作xml文件
- 用MMDrawerController实现侧滑
- 日历考勤记录
- SpirngMVC异常处理
- android tablelayout嵌套tablayout Fragment嵌套Fragment
- SpringBoot使用thymeleaf的简单记录
- [leetcode]327. Count of Range Sum
- 暑假第22天总结
- 九、 通用工具 ----pair 和Tuple---pair
- Oracle 查询优化的基本准则详解