现在的位置: 首页 > 综合 > 正文

如何创建一个滑出式导航面板(2)

2013年10月24日 ⁄ 综合 ⁄ 共 2154字 ⁄ 字号 评论关闭

接着上一篇如何创建一个滑出式导航面板(1)

现在靠向右边

MainViewController.m文件中,将下面的import语句添加到文件顶部:

  1. #import "RightPanelViewController.h"

然后添加下面的常量定义:

  1. #define RIGHT_PANEL_TAG 3

接着在@interface里面添加如下属性,这样就容易获取到right view和它的当前状态:

  1. @property (nonatomic, strong) RightPanelViewController *rightPanelViewController;
  2. @property (nonatomic, assign) BOOL showingRightPanel;

然后是找到getRightView方法,并移除里面已有的代码,然后添加下面的代码进去:

  1. // init view if it doesn't already exist
  2. if (_rightPanelViewController == nil)
  3. {
  4. // this is where you define the view for the right panel
  5. self.rightPanelViewController = [[RightPanelViewController alloc] initWithNibName:@"RightPanelViewController" bundle:nil];
  6. self.rightPanelViewController.view.tag = RIGHT_PANEL_TAG;
  7. self.rightPanelViewController.delegate = _centerViewController;
  8.  
  9. [self.view addSubview:self.rightPanelViewController.view];
  10.  
  11. [self addChildViewController:self.rightPanelViewController];
  12. [_rightPanelViewController didMoveToParentViewController:self];
  13.  
  14. _rightPanelViewController.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
  15. }
  16.  
  17. self.showingRightPanel = YES;
  18.  
  19. // set up view shadows
  20. [self showCenterViewWithShadow:YES withOffset:2];
  21.  
  22. UIView *view = self.rightPanelViewController.view;
  23. return view;

上面的代码是拷贝getLeftView的,只不过其中的类和属性不同而已。如果对上面的代码有任何疑问,可以回头看看之前的解释。

跟之前的一样,在xib文件中已经连接好了相关的IBAction和IBOutlet。下面是CenterViewController.xib文件的一个截图,显示出了puppies按钮的连接关系:

如上图所示,跟kitties按钮类似,puppies按钮连接到的IBOutlet是rightButton,IBAction是btnMovePanelLeft:。这个按钮控制着center panel的滑动以显示出右边的panel。

下面我们就来让panel移动起来吧。

打开CenterController.m文件,并将下面的代码添加到btnMovePanelLeft:中:

  1. UIButton *button = sender;
  2. switch (button.tag) {
  3. case 0: {
  4. [_delegate movePanelToOriginalPosition];
  5. break;
  6. }
  7.  
  8. case 1: {
  9. [_delegate movePanelLeft];
  10. break;
  11. }
  12.  
  13. default:
  14. break;
  15. }

同样,上面的代码与btnMovePanelRight:方法的实现没有什么不同。可以看到delegate的调用方法几乎是一样的。

因为之前已经实现了movePanelToOriginalPostion方法,所以剩下的任务只需要添加movePanelLeft 方法,并修改一下resetMainView以处理right panel即可。

 

将右边显示出来

打开MainViewController.m文件,并将下面的代码添加到movePanelLeft:方法中:

  1. UIView *childView = [self getRightView];
  2. [self.view sendSubviewToBack:childView];
  3.  
  4. [UIView animateWithDuration:SLIDE_TIMING delay:0 options:UIViewAnimationOptionBeginFromCurrentState
  5. animations:^{
  6. _centerViewController.view.frame = CGRectMake(-self.view.frame.size.width + PANEL_WIDTH, 0, self.view.frame.size

抱歉!评论已关闭.