先看下效果
1:新建一個(gè)項(xiàng)目,名字隨便起,在項(xiàng)目下新建一個(gè)實(shí)體文件夾,這個(gè)文件件就是存放封裝好的抽屜效果類(只有兩個(gè)類)
第一個(gè)類:MenuViewController 里面做抽屜效果的處理
要求外界提供一個(gè)根視圖控制器與一個(gè)左邊抽屜的視圖控制器(右邊的暫時(shí)沒做)
接下來到.m里面實(shí)現(xiàn)
1:先實(shí)現(xiàn)根控制器的初始化方法
-(instancetype)initWithRootViewController:(UIViewController *)controller
{
if (self = [super init]) {
self.rootVC = controller;
}
return self;
}
2:重寫左邊視圖的setter方法
- (void)setLeftVC:(UIViewController *)leftVC
{
_leftVC = leftVC;
}
3:重寫根視圖控制器的setter方法
- (void)setRootVC:(UIViewController *)rootVC
{
//對(duì)根視圖賦值
_rootVC = rootVC;
//1:先判斷根視圖是否為空,不為空才能進(jìn)行操作
if (_rootVC) {
//將根視圖控制器的視圖取出來
UIView *view = _rootVC.view;
view.frame = self.view.bounds;
[self.view addSubview:view];//把根視圖的view放在菜單上面
//添加手勢(shì)
[view addGestureRecognizer:self.leftSwipe];
[view addGestureRecognizer:self.rightSwipe];
[self setDefaultMenuImage];
}
}
4:給導(dǎo)航欄的左邊按鈕添加一張默認(rèn)的圖片
5:實(shí)現(xiàn)左邊按鈕的綁定方法,在這個(gè)方法里面只要判斷當(dāng)前的左邊視圖是否被打開(顯示與隱藏的方法寫在下面,這里先直接調(diào)用)
6:實(shí)現(xiàn)顯示與隱藏左邊視圖的方法
思路:先拿到左邊抽屜的視圖的view,在設(shè)置frame因?yàn)樽筮呉晥D只會(huì)顯示一部分
注意點(diǎn)就是拿到的view不能直接addSubview上去,而是要使用inserSubview:atIndex插入,否則會(huì)出現(xiàn)別的效果
7:顯示與隱藏的功能寫好了,現(xiàn)在在添加兩個(gè)手勢(shì) 分別調(diào)用兩個(gè)方法就可以了,注意 手勢(shì)要加在根視圖控制器的view上面,手勢(shì)在延展里面聲明成屬性
在viewDidLoad里面實(shí)現(xiàn)手勢(shì)
再實(shí)現(xiàn)兩個(gè)手勢(shì)綁定的方法(分別調(diào)用顯示與隱藏的方法就好了)
至此!這個(gè)類就算寫好了 當(dāng)然還有待優(yōu)化
第二個(gè)部分:
增加一個(gè)類 leftViewController 左邊抽屜的類 在里面封裝控制器的跳轉(zhuǎn)
在.h 文件里面暴露兩個(gè)數(shù)組讓外界使用者提供
標(biāo)題數(shù)組:
控制器數(shù)組:
因?yàn)闉榱朔奖闶褂玫氖荱ItableView
tableView的創(chuàng)建就不細(xì)說了
主要功能在它的點(diǎn)擊cell方法里面
這兩個(gè)類就算是初步封裝了,接著我們?cè)贏ppDelegate里面使用
別忘記在AppDelegate的.h里面將MenuViewController 定義為屬性
在程序啟動(dòng)完畢里面初始化
這樣簡(jiǎn)單的一個(gè)抽屜效果就出來了