今天寫qq的模仿項目,找到一個比較簡單的第三方框架
MMDrawerController
下面簡單介紹一下
MMDrawerController的使用
預覽效果如圖
創建一個抽屜視圖
UIViewController * leftDrawer = [[UIViewController alloc] init]; UIViewController * center = [[UIViewController alloc] init]; UIViewController * rightDrawer = [[UIViewController alloc] init]; MMDrawerController * drawerController = [[MMDrawerController alloc] initWithCenterViewController:center leftDrawerViewController:leftDrawer rightDrawerViewController:rightDrawer];
打開的手勢枚舉
-
MMOpenDrawerGestureMode
- MMOpenDrawerGestureModePanningNavigationBar: The user can open the drawer by panning anywhere on the navigation bar.
- MMOpenDrawerGestureModePanningCenterView: The user can open the drawer by panning anywhere on the center view.
- MMOpenDrawerGestureModeBezelPanningCenterView: The user can open the drawer by starting a pan anywhere within 20 points of the bezel.
- MMOpenDrawerGestureModeCustom: The developer can provide a callback block to determine if the gesture should be recognized. More information below.
下面介紹一個簡單的小栗子
// 第一步在AppDelegate.h中
@property (strong ,nonatomic) MMDrawerController * drawerController;
// 然后創建,這里是左中右三個頁面,每個頁面都用UINavigationController包一層如下
UINavigationController *rightNavi = [[UINavigationController alloc]initWithRootViewController:_search];
[rightNavi setRestorationIdentifier:@"RightNavigationControllerRestorationKey"];
_drawerController = [[MMDrawerController alloc]
initWithCenterViewController:center
leftDrawerViewController:leftNavi
rightDrawerViewController:rightNavi];
[self.drawerController setShowsShadow:NO];
[self.drawerController setRestorationIdentifier:@"MMDrawer"];
// 設置右邊頁面顯示寬度,左邊同理
[self.drawerController setMaximumRightDrawerWidth:ScreenWidth];
// 左右滑動,三個頁面間切換
[self.drawerController setOpenDrawerGestureModeMask:MMOpenDrawerGestureModeAll];
[self.drawerController setCloseDrawerGestureModeMask:MMCloseDrawerGestureModeAll];
// 設為根視圖
[self.window setRootViewController:_drawerController];
// 需要注意的是如果使用按鈕實現push,pop功能,在左中右三個頁面上不能使用self.navigationcontroller.pushviewcontroller而是使用mm自帶的 中間頁面可用如下代碼
[self.mm_drawerController openDrawerSide:MMDrawerSideLeft
animated:YES
completion:^(BOOL finished) {
}];
// openDrawerSide 指的是方向 功能同上面手勢功能一樣
// 左右頁面對應使用返回,例如寫在左上角的返回按鈕的點擊事件里如下
//[button addTarget:self action:@selector(clickLeft) //forControlEvents:UIControlEventTouchUpInside];
// UIBarButtonItem* backItem = [[UIBarButtonItem alloc] //initWithC
ustomView:button];
[self.navigationItem setLeftBarButtonItem:backItem];
[self.mm_drawerController closeDrawerAnimated:YES completion:^(BOOL finished) {
}];
代碼見 github:https://github.com/Disneydusunan/6-TEST--MMDWRAWER-