承接上文,分析侧滑效果。我们已经对ContentView(A)做出了分析与大致实现方法。这次,我们去分析背景的实现方式。

在ContentView(A)视图滑动过程中,menuViewController (B)中的视图也有线性的变化,位置大小的线性变化。线性变化值可以参考ContentView(A)线性变化比例。并且有点击屏幕使menuView隐形消失效果。

   那既然这样,我们不妨创建一个总视图(D)包含backimageview(C)、menuviewController(B)、以及contentviewController(A)。在分别建立A、B、C视图,作为D的子controller。

        所以,在D中,引入menuviewControllercontentviewController , 定义menuviewController * leftMenuViewController,  contentviewController

       以添加菜单视图为例。

[self.view addSubview:self.menuViewContainer];
      self.menuViewContainer.frame = self.view.bounds;
      self.menuViewContainer.backgoundColor = [UIColor clearColor];//设置背景色为透明
leftmenuviewController)
     {
              [self addChildViewController:self.leftMenuViewController];  //作为子Controller;
              //设置一些属性
             self.leftMenuViewController.view.frame = self.view.bounds;
             self.leftMenuViewController.view.background = [UIcolor clearColor];  
             self.leftMenuViewController.vive.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
             [self.menuViewContainer addSubview:self.leftMenuViewController.view];
             [self.leftMenuViewController didMoveToParentViewController:self];
     }       
     以此,我们类似的给self.contentViewContainer加载 self.ContentViewController.view
     //定义UIPanGestureRecognizer *edgePanGesture 
     [self.contentViewContainer addGustureRecognizer:edgePanGesture];  //给contentViewContainer添加移动手势。
     [self.contentViewContainer addSubview:self.gestureRecognizerView];   //将点击手势区域作为contentView的子视图
     //定义点击手势
     UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapGestureRecognizer:)];
    [self.gestureRecognizerView addGestureRecognizer:tap];
     //滑动contentViewContainer时,可参见上片,contentViewContainer手势方法
      - (void)panGestureRecognizer:(UIScreenEdgePanGestureRecognizer *)recognizer{
      CGPoint point = [recognizertranslationInView:self.view];
    if (recognizer.state ==UIGestureRecognizerStateBegan) {
       //添加阴影,在http://www.jianshu.com/p/3a350bb9d9ee下载工程,YQSlideMenuController里有完整步骤,可参考。
     }elseif(recognizer.state ==UIGestureRecognizerStateChanged){
 float trueDistance = distance + point.x; //实时距离。
     //计算上文提到的y与x的关系方法。
     //平移与缩放的动画
     //判断不同的状态情况,填写不同的平移缩放参数
trueDistance,self.view.center.y); //中心点平移
      self.contentViewContainer =CGAffineTransformScale(CGAffineTransformIdentity,y,y); CGAffineTransformScale 缩放方法。
      self.menuViewContainer.transform = CGAffinerTransformMakeScale(a,b);
      self.menuViewContainer.transform = CGAffinerTransformScale(self.menuViewContainer.transform,m,n);
elseif(recognizer.state ==UIGestureRecognizerStateEnded){
    //根据位置做自动停靠,也可结合手势滑动的方向做自动停靠,判断MenuView是否显示的状态。
    }
}
   //我们应该设置点击时候,有一个判断Menu是否处于显示与隐藏的状态。BOOL menuHidden; 并且在上述滑动手势判断时候,把对应的情况加进去。提供点击方法,在点击中做Menu的显示与隐藏的方法。
 -(void)tapGestureRecgnizer:(UITapGextureRecognizer *)recognizer{
    if(!self.menuHidden){
       [self hideMenu];
     }
  }   
 -(void)hideMenu{
    if(!self.menuHidden){
       [self shoeMenu:NO];
    }
  }
  - (void)shoeMenu:(BOOL)show{
    //主要是做显示与隐藏的动画效果,利用UIView animateWithDurantion time animations:^{}方法;
    [UIView animateWithDuration:duration aninations:^{
       if(show){
         self.contentViewContainer.transform = CGAffinerTransformMakeTranslation();
         self.contentViewContainer.transform = CGAffinerTransformScela();
         self.menuViewContainer.transform = CGAfinerTransformIdentity;
       }else{
         self.contentViewContainer,transform = CGAffinerTransformIndetity;
         self.contentViewScale = 1;
         self.menuViewContainer.transform = CGAffineTransformMakeScale();
         self.menuViewContainer.transform = CGAffinerTransformTranslate();
       }
    }completion:^(BOOL finished){
         self.menuHidden = !show;
         self.gestureRecognizerView.hidden = !show;
    }];
 }

大致。思路,如此。有些逻辑判断并没有展示出来,以借鉴,以分析,以宽容,以希望与努力。