zoukankan      html  css  js  c++  java
  • 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用于显示左、右菜单控制器。展现左、右菜单控制器的主要工作就是缩放内容视图,然后平移内容视图。

     

  • 相关阅读:
    如何更改Web Service部署生成的App_Code.dll的名称
    Orcas中C#语言的新特性:自动属性,对象初始化器,和集合初始化器
    驗證類javascript
    多线程下WinForm开发应该注意哪些问题?
    把表从Access2007导出到Sql Server
    面向对象模型的四种核心技术
    ASP常用代碼二
    熊猫烧香代码
    简繁体互转代码
    上班人员必读:“五险一金”详解!
  • 原文地址:https://www.cnblogs.com/mkai/p/6404408.html
Copyright © 2011-2022 走看看