RESideMenu使用与解析

课前准备

IOS中,一个视图可以包含多个视图,也就是说视图之间存在父子关系;同时,视图控制器ViewController之间也是存在父子关系的,也就是说一个视图控制器可以包含多个视图控制器。既然视图之间可以构建父子关系,那么为什么还要构建视图控制器之间的父子关系呢?视图控制器,正如其名,就是帮助我们管理、控制视图的。如果我们把所有的 子view 都交给 父view管理,那么父view肯定会很庞大臃肿,我们可以根据逻辑,把view划分给不同的视图控制器viewContorller管理。在iOS中,我们称父控制器为容器控制器。比如,UITabBarController、UINavigationController就是典型的容器控制器,它们可以包含多个子控制器。

 

RESideMenu的简单使用(参考官方教程)

我们想实现这样的功能:

    点击导航栏左边按钮,当前内容视图能够向右滑出一半,于此同时,屏幕左侧会出现一个菜单视图,效果如下图:

 

我们可以借助RESideMenu实现这个功能。

首先,我们需要创建两个视图控制器,一个表示当前内容视图控制器,另一个代表左侧的菜单控制器。然后,分别赋值给RESideMenu的contentViewController和leftMenuViewController属性。

 

[objc] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. RESideMenu *resideMenu=[[RESideMenu alloc] init];  
  2. resideMenu.contentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"contentViewController"];  
  3. resideMenu.leftMenuViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"leftMenuViewController"];  

 

 

然后,我们可以根据 项目需要 设置RESideMenu的其他相关属性,下面列出常用属性:

控制 视差视觉效果的属性以及默认值

 

[objc] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. _parallaxEnabled = YES;  
  2. _parallaxMenuMinimumRelativeValue = -15;  
  3. _parallaxMenuMaximumRelativeValue = 15;  
  4. _parallaxContentMinimumRelativeValue = -25;  
  5. _parallaxContentMaximumRelativeValue = 25;  

 

 

控制 内容控制器的阴影效果

 

[objc] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. _contentViewShadowEnabled = NO;  
  2. _contentViewShadowColor = [UIColor blackColor];  
  3. _contentViewShadowOffset = CGSizeZero;  
  4. _contentViewShadowOpacity = 0.4f;  
  5. _contentViewShadowRadius = 8.0f;  


控制 内容控制器的 缩放以及偏移

 

 

[objc] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. _contentViewInLandscapeOffsetCenterX = 30.f;  
  2. _contentViewInPortraitOffsetCenterX  = 30.f;  
  3. _scaleContentView = YES;  
  4. _contentViewScaleValue = 0.7f;  

 

 

RESideMenu解析

RESideMenu的实现的基本思路:

需要说明的是viewDidLoad方法主要做的事情:

判断属性contentViewController、leftMenuViewController和rightMenuViewController是否为空,如果不为空,设置它们与RESideMenu容器控制器之间的关系,主要步骤分为四步:

1.设置viewController为RESideMenu容器控制器的子控制器

2.设置viewController的view的frame

3.把viewController的view添加到RESideMenu容器控制器的view的中

4.调用viewController的didMoveToParentViewController:,通知viewController它已经被添加到父控制器中。

 

 

RESideMenu具有哪些功能呢?

1.充当一个容器控制器,有一个内容控制器、左菜单控制器以及右菜单控制器

2.创建一个类别 UIViewController+RESideMenu ,这个类别提供了一个属性sideMenuViewController、两个方法presentLeftMenuViewController和presentRightMenuViewController。sideMenuViewController属性 指代 当前控制器属于哪一个RESideMenu容器控制器;presentLeftMenuViewController和presentRightMenuViewController方法用于打开左、右菜单控制器。

3.可以用手指滑动打开左、右菜单控制器,通过添加一个pan手势识别来实现

 

4. 显示左、右菜单控制器。RESideMenu创建了一个分类UIViewController+RESideMenu,这个分类提供了方法presentLeftMenuViewController和presentRightMenuViewController用于显示左、右菜单控制器。展现左、右菜单控制器的主要工作就是缩放内容视图,然后平移内容视图。

 

posted @ 2017-02-16 10:02  超神船长  阅读(1090)  评论(0编辑  收藏  举报