源代码下载地址:https://github.com/ZhengYaWei1992/ZWDrawer
首先看一下使用方式,其中ZWDrawerViewController 是封装的抽屉效果视图控制器,tabbarVC是常规的tabbar控制器,leftMenuVC是左边的划出的菜单控制器,300是左边菜单视图的宽度。
_window.rootViewController = [ZWDrawerViewController drawerVCWithMainVC:tabbarVC leftMenuVC:leftMenuVC leftWidth:300];
第二行核心代码是 [[ZWDrawerViewController shareDrawer]switchViewController:nav];以下代码是左边试图控制器的tableViewcell点击时调用的方法,其中backHome是ZWDrawerViewController抽屉效果视图控制器中实现的一个方法。主要是在这个方法中添加了边缘手势。其中switchViewController方法中主要是添加了边缘手势,可通过控制器的边缘拖拽手势返回上一个控制器。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
UIViewController *vc = [[UIViewController alloc]init];
//注意:这里的target是[ZWDrawerViewController shareDrawer],backHome是它内部的一个方法
vc.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:[ZWDrawerViewController shareDrawer] action:@selector(backHome)];
UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:vc];
vc.title = self.titleArr[indexPath.row];
[[ZWDrawerViewController shareDrawer]switchViewController:nav];
}
使用起来就是如此简单。
接下来简单讲解一下抽屉效果的实现原理,实际上就是将app的跟视图控制器设置为ZWDrawerViewController而不是常规的tabbartVC。然后将左边菜单视图控制器和tabbar视图控制器设置为ZWDrawerViewController的姿势图控制器,通过添加手势来控制左边菜单试图控制器和tabbarVC的显示坐标。但是这里要注意,不是使用常规的手势,这里主要是通过使用边缘手势UIScreenEdgePanGestureRecognizer这个类实现。
另外,当左边菜单视图控制器滚动到一定程度的时候,在tabbarVC上防止了一个灰色半透明的按钮,当点击按钮的时候,可以返回初始状态。具体请看源代码,ZWDrawerViewController 这个类中代码也就两百行左右。