抽屜效果呢,有個(gè)主界面,還有個(gè)抽屜界面。(好像廢話(⊙o⊙)…)
1.創(chuàng)建這兩個(gè)界面,把兩個(gè)界面聯(lián)立起來(lái)
我的思路呢。。。
1.創(chuàng)建一個(gè)自定義tabBar的封裝類,如果不用,直接寫的也沒(méi)關(guān)系
2.把兩個(gè)界面創(chuàng)建出來(lái),用一句代碼把這倆合并起來(lái),變成一個(gè)_drawerController,
3.正常不應(yīng)該把主界面 塞進(jìn)tabBar里面么,不塞它了,塞這個(gè)_drawerController。。。
4.不說(shuō)了,ctrl+C。。。
#import"MMDrawerController.h"
@property(strong,nonatomic)MMDrawerController* drawerController;
創(chuàng)建這倆界面,主界面套個(gè)導(dǎo)航控制器,我們得到 navi1 和 mineLeft
//首先是主界面:HLLONeViewController
HLLOneViewController * one = [[HLLOneViewController alloc]init];
HLLNavigationViewController* navi1 = [[HLLNavigationViewController alloc] initWithRootViewController:one];//給界面 套上個(gè)導(dǎo)航,HLLNavigationViewController替換成你自己的導(dǎo)航控制器
[navi1 setRestorationIdentifier:@"RightNavigationControllerRestorationKey"];
//抽屜界面 HLLMineViewController
HLLMineViewController * mineLeft = [[HLLMineViewController alloc]init];
現(xiàn)在把他們完美結(jié)合,永相隨!
_drawerController = [[MMDrawerController alloc]initWithCenterViewController:navi1 leftDrawerViewController:mineLeft? rightDrawerViewController:nil];
配置抽屜效果,這幾個(gè)效果應(yīng)該夠用了。。。
[self.drawerController setShowsShadow:YES];
[self.drawerController setRestorationIdentifier:@"MMDrawer"];
// 設(shè)置抽屜界面的寬度
[self.drawerController setMaximumLeftDrawerWidth:SCREEN_W*0.75];
// 左右滑動(dòng),實(shí)現(xiàn)開(kāi)關(guān)
[self.drawerController setOpenDrawerGestureModeMask:MMOpenDrawerGestureModeAll];
[self.drawerController setCloseDrawerGestureModeMask:MMCloseDrawerGestureModeAll];
塞進(jìn)tabBar里面,我這個(gè)是tabBar類,直接寫的把self替換成你的tabBar名字就行
[self addChildViewController:self.drawerController];
2.首先在主界面中,大概介個(gè)樣子,實(shí)現(xiàn)導(dǎo)航欄左btn

#import"MMDrawerBarButtonItem.h"http://第三方封裝的頭文件
MMDrawerBarButtonItem* leftDrawerButton = [[MMDrawerBarButtonItem alloc]initWithTarget:self action:@selector(mineClick)]; //建個(gè)btn,給個(gè)點(diǎn)擊事件
[self.navigationItem setLeftBarButtonItem:leftDrawerButtonanimated:YES]; //把它設(shè)置為導(dǎo)航欄左btn
//給btn個(gè)圖片
UIImage* leftImage = [[UIImage imageNamed:@"yonghu"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
self.navigationItem.leftBarButtonItem.image= leftImage;
ok,接下來(lái)實(shí)現(xiàn)點(diǎn)擊事件的方法,用于 點(diǎn)擊后顯示抽屜效果
- (void)mineClick{
if([selfisKindOfClass:[HLLOneViewController class]]) {//判斷下是否當(dāng)前界面,不用的話直接寫就行
[self.mm_drawerController toggleDrawerSide:MMDrawerSideLeft animated:YEScompletion:nil];
}
}
恩,不錯(cuò)呢,現(xiàn)在你嘗試點(diǎn)擊,或者右滑,界面就會(huì)變成介個(gè)樣紙 ↓

3.實(shí)現(xiàn)抽屜界面,和跳轉(zhuǎn)效果
*建議寫這個(gè)界面的時(shí)候呢,因?yàn)檫@個(gè)界面只顯示75%,所以建議畫UI的時(shí)候用這個(gè)寬度寫
//屏幕 寬,此界面用這個(gè)
#define width_mine [UIScreen mainScreen].bounds.size.width*0.75
比較煩人的就是這個(gè)跳轉(zhuǎn)問(wèn)題,一般軟件的效果,就是點(diǎn)擊一個(gè)小東西,然后這個(gè)抽屜就關(guān)閉了,然后在你的主界面切換回來(lái),在主界面跳轉(zhuǎn),當(dāng)你返回的時(shí)候,也是返回主界面,抽屜是關(guān)著的。
弄的不好呢,上面那個(gè)圖,2不動(dòng),1跳了個(gè)界面?;蛘咛鋈?,返回的時(shí)候是上面那個(gè)圖
不說(shuō)了,ctrl+C。。
首先,寫這樣一個(gè)方法,用于關(guān)閉抽屜。
#import"UIViewController+MMDrawerController.h"http://第三方封裝的頭文件
- (void)closeDrawer{
[self.mm_drawerController closeDrawerAnimated:YES completion:^(BOOL finished) {
// 設(shè)置打開(kāi)抽屜模式為MMOpenDrawerGestureModeNone,也就是沒(méi)有任何效果。
[self.mm_drawerController setOpenDrawerGestureModeMask:MMOpenDrawerGestureModeNone];
}];
// 當(dāng)我們的 抽屜界面 退出后,我們要把打開(kāi)抽屜模式再切換過(guò)來(lái),當(dāng)然這個(gè)是在中間控制器里面去寫,因?yàn)?抽屜界面 退出后會(huì)呈現(xiàn)中間控制器
}
這個(gè)方法啥時(shí)候用呢,如果你的btn,點(diǎn)擊事件是跳界面,就加上這句,或者有table,cell點(diǎn)擊事件里也加上這句[self closeDrawer];
還有跳轉(zhuǎn)的那句代碼,不一樣。寫個(gè)點(diǎn)擊事件的例子:
- (void)goToHaHa:(UIButton*)sender{
[self closeDrawer];
[(UINavigationController *)self.mm_drawerController.centerViewController pushViewController:[HaHaViewController new]? animated:YES];
}