gihub框架地址:https://github.com/mutualmobile/MMDrawerController
將MMDrawerController框架導(dǎo)入工程中
實現(xiàn)效果如下:
1、首先創(chuàng)建2個控制器為center忠烛、left默蚌,創(chuàng)建完成之后蕴茴,我們來到我們的AppDelegate迅诬,開始編寫我們的代碼了
1.1多話不說箭养,先導(dǎo)入頭文件奥喻,并且添加一個MMDrawerController的屬性
#import "MMDrawerController.h"
#import "UIViewController+MMDrawerController.h"
//為自己創(chuàng)建的控制器
#import "LitterLLeftViewController.h"
#import "LitterLCenterViewController.h"
//?添加一個MMDrawerController的屬性
@property(nonatomic,strong)MMDrawerController *drawerController;
1.2?上面的做完后偶宫,我們便要顯示我們的窗口到設(shè)備上,接下來來到這里
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {
? ? //1环鲤、初始化控制器
? ? UIViewController *centerVC = [[LitterLCenterViewController alloc]init];
? ? UIViewController *leftVC = [[LitterLLeftViewController alloc]init];
? ? //2纯趋、初始化導(dǎo)航控制器
? ? UINavigationController *centerNvaVC = [[UINavigationController alloc]initWithRootViewController:centerVC];
? ? UINavigationController *leftNvaVC = [[UINavigationController alloc]initWithRootViewController:leftVC];
? ? //3、使用MMDrawerController
? ? self.drawerController = [[MMDrawerController alloc]initWithCenterViewController:centerNvaVC leftDrawerViewController:leftNvaVC];
? ? //4、設(shè)置打開/關(guān)閉抽屜的手勢
? ? self.drawerController.openDrawerGestureModeMask = MMOpenDrawerGestureModeAll;
? ? self.drawerController.closeDrawerGestureModeMask =MMCloseDrawerGestureModeAll;
? ? //5吵冒、設(shè)置左右兩邊抽屜顯示的多少
? ? self.drawerController.maximumLeftDrawerWidth = 200.0;
? ? self.drawerController.maximumRightDrawerWidth = 200.0;
? ? //6纯命、初始化窗口、設(shè)置根控制器痹栖、顯示窗口
? ? self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
? ? [self.window setRootViewController:self.drawerController];
? ? [self.window makeKeyAndVisible];
? ? return YES;
}
2亿汞、完成上面后基本的抽屜效果就已經(jīng)實現(xiàn)了,在這里的話揪阿,我們來到我們的中間控制器里疗我,我們將要實現(xiàn)導(dǎo)航欄上面的按鈕,以及一些效果南捂。
// 導(dǎo)入頭文件
#import "UIViewController+MMDrawerController.h"
/**
?*? 加載控制器的時候設(shè)置打開抽屜模式? (因為在后面會關(guān)閉)
?*/
-(void)viewWillAppear:(BOOL)animated{
? ? [super viewWillAppear:animated];
? ? //設(shè)置打開抽屜模式
? ? [self.mm_drawerController setOpenDrawerGestureModeMask:MMOpenDrawerGestureModeAll];
}
self.view.backgroundColor = [UIColor whiteColor];
? ? self.title=@"Demo";
? ? //1吴裤、設(shè)置導(dǎo)航欄的按鈕
? ? self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"menu"] style:UIBarButtonItemStylePlain target:self action:@selector(leftBtn)];
? ? //2、添加雙擊手勢
? ? UITapGestureRecognizer * doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTap:)];
? ? //2.1黑毅、雙擊
? ? [doubleTapsetNumberOfTapsRequired:2];
? ? [self.view addGestureRecognizer:doubleTap];
? ? //3嚼摩、添加兩個手指雙擊手勢
? ? UITapGestureRecognizer* twoFingerDoubleTap = [[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(twoFingerDoubleTap:)];
? ? //3.1、雙擊
? ? [twoFingerDoubleTapsetNumberOfTapsRequired:2];
? ? //3.2矿瘦、兩個手指? 默認(rèn)為一個
? ? [twoFingerDoubleTapsetNumberOfTouchesRequired:2];
? ? [self.viewaddGestureRecognizer:twoFingerDoubleTap];
-(void)leftBtn{
? ? //這里的話是通過遍歷循環(huán)拿到之前在AppDelegate中聲明的那個MMDrawerController屬性枕面,然后判斷是否為打開狀態(tài),如果是就關(guān)閉缚去,否就是打開(初略解釋潮秘,里面還有一些條件)
? ? [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];
}
3.1、數(shù)據(jù)源的編寫易结,我們來到我們的左邊的控制器里枕荞,這里的話我用的都是靜態(tài)數(shù)據(jù),就不做解釋了
// 導(dǎo)入頭文件
#import "LitterLShowViewController.h" // 點擊單元格跳轉(zhuǎn)到這個控制器上
#import "UIViewController+MMDrawerController.h"
? ?self.title = @"Left-Demo";
? ? UITableView *tableView = [[UITableView alloc]initWithFrame:self.view.frame style:UITableViewStylePlain];
? ? tableView.delegate=self;
? ? tableView.dataSource=self;
? ? [self.viewaddSubview:tableView];
#pragma mark - UITableViewDataSource
- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section {
? ? return 10;
}
- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {
? ? staticNSString*CellIdentifier =@"Cell";
? ? UITableViewCell*cell = [tableViewdequeueReusableCellWithIdentifier:CellIdentifier];
? ? if(!cell) {
? ? ? ? cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
? ? }
? ? cell.textLabel.text=[NSStringstringWithFormat:@"Left-Demo%ld",indexPath.row];
? ? returncell;
}
#pragma mark - UITableViewDelegate
// 3.2搞动、這里就是我們的最后一步躏精,點擊Cell跳轉(zhuǎn)控制器了,那么我們的有一個控制器取名為:LitterLShowViewController
-(void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath{
? ? LitterLShowViewController *showVC = [[LitterLShowViewController alloc]init];
? ? showVC.title= [NSStringstringWithFormat:@"Left-Demo%ld",indexPath.row];
? ? //拿到我們的LitterLCenterViewController,讓它去push
? ? UINavigationController* nav = (UINavigationController*)self.mm_drawerController.centerViewController;
? ? [navpushViewController:showVC animated:NO];
? ? //當(dāng)我們push成功之后鹦肿,關(guān)閉我們的抽屜
? ? [self.mm_drawerController closeDrawerAnimated:YES completion:^(BOOL finished) {
? ? ? ? //設(shè)置打開抽屜模式為MMOpenDrawerGestureModeNone矗烛,也就是沒有任何效果。
? ? ? ? [self.mm_drawerController setOpenDrawerGestureModeMask:MMOpenDrawerGestureModeNone];
? ? }];
}
4箩溃、當(dāng)我們的LitterLShowViewController退出后瞭吃,我們的把打開抽屜模式在切換過來,當(dāng)然這個是在中間控制器里面去寫,因為LitterLShowViewController退出后會呈現(xiàn)中間控制器
// 導(dǎo)入頭文件
#import "MMDrawerBarButtonItem.h"
#import "UIViewController+MMDrawerController.h"
-(void)viewWillAppear:(BOOL)animated{
? ? [superviewWillAppear:animated];
? ? //關(guān)閉抽屜模式
? ? [self.mm_drawerController setOpenDrawerGestureModeMask:MMOpenDrawerGestureModeNone];
}