接着上一篇如何创建一个滑出式导航面板(1)
现在靠向右边
在MainViewController.m文件中,将下面的import语句添加到文件顶部:
- #import "RightPanelViewController.h"
然后添加下面的常量定义:
- #define RIGHT_PANEL_TAG 3
接着在@interface里面添加如下属性,这样就容易获取到right view和它的当前状态:
- @property (nonatomic, strong) RightPanelViewController *rightPanelViewController;
- @property (nonatomic, assign) BOOL showingRightPanel;
然后是找到getRightView方法,并移除里面已有的代码,然后添加下面的代码进去:
- // init view if it doesn't already exist
- if (_rightPanelViewController == nil)
- {
- // this is where you define the view for the right panel
- self.rightPanelViewController = [[RightPanelViewController alloc] initWithNibName:@"RightPanelViewController" bundle:nil];
- self.rightPanelViewController.view.tag = RIGHT_PANEL_TAG;
- self.rightPanelViewController.delegate = _centerViewController;
- [self.view addSubview:self.rightPanelViewController.view];
- [self addChildViewController:self.rightPanelViewController];
- [_rightPanelViewController didMoveToParentViewController:self];
- _rightPanelViewController.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
- }
- self.showingRightPanel = YES;
- // set up view shadows
- [self showCenterViewWithShadow:YES withOffset:2];
- UIView *view = self.rightPanelViewController.view;
- return view;
上面的代码是拷贝getLeftView的,只不过其中的类和属性不同而已。如果对上面的代码有任何疑问,可以回头看看之前的解释。
跟之前的一样,在xib文件中已经连接好了相关的IBAction和IBOutlet。下面是CenterViewController.xib文件的一个截图,显示出了puppies按钮的连接关系:
如上图所示,跟kitties按钮类似,puppies按钮连接到的IBOutlet是rightButton,IBAction是btnMovePanelLeft:。这个按钮控制着center panel的滑动以显示出右边的panel。
下面我们就来让panel移动起来吧。
打开CenterController.m文件,并将下面的代码添加到btnMovePanelLeft:中:
- UIButton *button = sender;
- switch (button.tag) {
- case 0: {
- [_delegate movePanelToOriginalPosition];
- break;
- }
- case 1: {
- [_delegate movePanelLeft];
- break;
- }
- default:
- break;
- }
同样,上面的代码与btnMovePanelRight:方法的实现没有什么不同。可以看到delegate的调用方法几乎是一样的。
因为之前已经实现了movePanelToOriginalPostion方法,所以剩下的任务只需要添加movePanelLeft 方法,并修改一下resetMainView以处理right panel即可。
将右边显示出来
打开MainViewController.m文件,并将下面的代码添加到movePanelLeft:方法中:
- UIView *childView = [self getRightView];
- [self.view sendSubviewToBack:childView];
- [UIView animateWithDuration:SLIDE_TIMING delay:0 options:UIViewAnimationOptionBeginFromCurrentState
- animations:^{
- _centerViewController.view.frame = CGRectMake(-self.view.frame.size.width + PANEL_WIDTH, 0, self.view.frame.size