试图切换能够用transitionFromViewController。

步骤:

View Controller中能够加入多个sub view,在须要的时候显示出来;

能够通过viewController(parent)中能够加入多个child viewController;来控制页面中的sub view。减少代码耦合度;

通过切换,能够显示不同的view;,替代之前的addSubView的管理

代码:

苹果API中所带方法:

addChildViewController: 

removeFromParentViewController 

transitionFromViewController:toViewController:duration:options:animations:completion: 

willMoveToParentViewController: 

didMoveToParentViewController:



以下具体介绍一下addChildViewController,一个ViewController能够加入多个子ViewController,可是这些子ViewControlle要想显示出来,须要把子controller的视图加入到父视图的对应位置r,能够通过transitionFromViewController:toViewController:duration:options:animations:completion:这种方法转换显示的子视图。

同一时候加入对应的动画。

以下以一个样例来说明这几个新方法:

以下具体介绍一下上述效果的实现:

  1. 创建项目,changeViewController。
  2. 加入对应的viewController,MainViewController、FirstViewController、SecondViewController、ThirdViewController。

3.把MainViewController加入到window中。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 



    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

    // Override point for customization after application launch. 

    MainViewController *mainViewController=[[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil]; 

    self.window.rootViewController=mainViewController; 

    [self.window makeKeyAndVisible]; 

    return YES; 

}

4.在MainViewController中加入三个按钮。而且连接onClickbutton方法。

5.在MainViewController中加入三个子controller

#pragma mark – View lifecycle

- (void)viewDidLoad 



    [super viewDidLoad]; 

    // Do any additional setup after loading the view from its nib. 

    

    FirstViewController *firstViewController=[[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil]; 

    [self addChildViewController:firstViewController]; 

    

    SecondViewController *secondViewController=[[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; 

    [self addChildViewController:secondViewController]; 

    

    

    ThirdViewController *thirdViewController=[[ThirdViewController alloc] initWithNibName:@"ThirdViewController" bundle:nil]; 

    [self addChildViewController:thirdViewController]; 

    

    [contentView addSubview:thirdViewController.view]; 

    

    currentViewController=thirdViewController; 

    

}

当中要把当中的一个子controller的view加入到根视图中,这样才干显示出对应的视图。

6.点击button,切换视图。

-(IBAction)onClickbutton:(id)sender 



    FirstViewController *firstViewController=[self.childViewControllers objectAtIndex:0]; 

    ThirdViewController *thirdViewController=[self.childViewControllers objectAtIndex:2]; 

    SecondViewController *secondViewController=[self.childViewControllers objectAtIndex:1]; 

    if ((currentViewController==firstViewController&&[sender tag]==1)||(currentViewController==secondViewController&&[sender tag]==2) ||(currentViewController==thirdViewController&&[sender tag]==3) ) { 

        return; 

    } 

    UIViewController *oldViewController=currentViewController; 

    switch ([sender tag]) { 

        case 1: 

        { 

            [self transitionFromViewController:currentViewController toViewController:firstViewController duration:4 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{ 

            }  completion:^(BOOL finished) { 

                if (finished) { 

                    currentViewController=firstViewController; 

                }else{ 

                    currentViewController=oldViewController; 

                } 

            }]; 



            break; 

        case 2: 

        { 

            [self transitionFromViewController:currentViewController toViewController:secondViewController duration:1 options:UIViewAnimationOptionTransitionFlipFromTop animations:^{ 

                

            }  completion:^(BOOL finished) { 

                if (finished) { 

                  currentViewController=secondViewController; 

                }else{ 

                    currentViewController=oldViewController; 

                } 

            }]; 

        } 

            break; 

        case 3: 

        { 

            NSLog(@"好友申请"); 

            [self transitionFromViewController:currentViewController toViewController:thirdViewController duration:1 options:UIViewAnimationOptionTransitionFlipFromBottom animations:^{ 

                

            }  completion:^(BOOL finished) { 

                if (finished) { 

                     currentViewController=thirdViewController; 

                }else{ 

                    currentViewController=oldViewController; 

                } 

            }]; 

        } 

            break; 

        default: 

            break; 

    } 

}

当中我把button设置成不同的tag了。

这时候点击button,就能够切换子视图了。

能够看到,这些view在没有使用时。是不会被load的,而且当有Memory Warning时。当前没有显示的view自己主动被unload掉了。

这样写的优点:

  • 多个UIViewController之间切换能够加入动画
  • 当内存警告的时候。能够把当前不是激活状态的ViewController内存释放。所以新的方法确实能有效地节省内存,也能方便地处理内存不足时的资源回收
  • 能够把代码更好分开

试图切换控制addChildViewController、_transitionFromViewController的更多相关文章

  1. Atitit.软件控件and仪表盘(23)--多媒体子系统--视频输出切换控制cvbs av s-video Ypbpr pal ntsc

    Atitit.软件控件and仪表盘(23)--多媒体子系统--视频输出切换控制cvbs av s-video Ypbpr pal  ntsc 1. CVBS是AV接口 1 2. S-Video S端子 ...

  2. 分段控制器UISegmentedControl的使用、同一个控制器中实现多个View的切换、addChildViewController等方法的使用

    本文先讲解简单的分段控制器UISegmentedControl的使用,然后具体讲解它最常使用的场景:同一个控制器中实现多个View的切换. 文章构思: 1.先直接讲解一张UI效果图的四种实现方式. 2 ...

  3. Linux 普通用户su命令切换控制

    1.编辑配置文件/etc/pam.d/su .将下面配置文件"#“去掉: # auth           required        pam_wheel.so use_uid 改成 a ...

  4. vue 组件 单选切换控制模板 v-bind-is

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>T ...

  5. iOS开发自定义试图切换

    CATransition *transition = [CATransition animation]; transition.duration = 1.0f; transition.timingFu ...

  6. Objective-C ,ios,iphone开发基础:多个视图(view)之间的切换,以及视图之间传值。

    所有的视图都继承自 UIViewController,都使用 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nib ...

  7. app引导页(背景图片切换加各个页面动画效果)

    前言:不知不觉中又加班到了10点半,整个启动页面做了一天多的时间,一共有三个页面,每个页面都有动画效果,动画效果调试起来麻烦,既要跟ios统一,又要匹配各种不同的手机,然后产品经理还有可能在中途改需求 ...

  8. jquery图片播放切换插件

    点击这里查看效果可自定义数字样式和左右点击按钮 这个更好:移入按钮切换版本 更多图片轮播 以下是HTML文件代码: <!DOCTYPE html PUBLIC "-//W3C//DTD ...

  9. 通过gdb跟踪进程调度分析进程切换的过程

    作者:吴乐 山东师范大学 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 本实验目的:通过gdb在lin ...

随机推荐

  1. SpringCloud学习笔记(11)----Spring Cloud Netflix之Hystrix断路器的使用

    为什么会有断路器? 在微服务架构中,系 是拆分成 一个的服务单元各间通过注册与发现 的方式互相依 赖.每个单元都在不同的进程中运行, 都是通过远程调用的方式进行信 ,这样就有可能因为网络原或 是依赖服 ...

  2. Msql免安装版安装

     文首提要:             我下载的MySQL版本是:mysql-5.7.17-winx64.zip  Archive版:系统:Windows7 64位. 一.解压文件 下载好MySQL后, ...

  3. (转载)比较web ui 框架

    以下是几个精致的web UI框架 1.Aliceui Aliceui是支付宝的样式解决方案,是一套精选的基于 spm 生态圈的样式模块集合,是 Arale 的子集,也是一套模块化的样式命名和组织规范, ...

  4. PHP检验代码执行效率—时间统计方法

    <?php class runtime { ; ; function get_microtime() { list($usec,$sec) =explode('',microtime()); r ...

  5. electron 新手教程 打包 exe

    1.安装nodejs(会自动安装npm) 2.桌面新建文件夹    your-app  (下面目录结构) your-app/ ├── package.json ├── main.js └── inde ...

  6. G4Studio+extjs+highcharts 下在ext4j的panel中放入hightCharts图表

    在G4Studio+extjs下.创建一个panel,然后将highCharts图表放入panel中.实现方法例如以下: 首先简单给出的部分代码: Ext.onReady(function() { v ...

  7. 不安全的直接对象引用:你的 ASP.NET 应用数据是否安全?

    介绍 作为一个在X94的航空工程师,你的老板要求你从2号楼的工程图中检索出一个特定的专利.不幸的是,进入大楼需要你出示你具有进入大楼的资格的证明,然后你迅速地以徽章的形式出示给了保安.到了十三楼,进入 ...

  8. 程序设计基石与实践系列之编写高效的C程序与C代码优化

    原文出处: codeproject:Writing Efficient C and C Code Optimization 虽然对于优化C代码有非常多有效的指导方针,可是对于彻底地了解编译器和你工作的 ...

  9. hdu 4288 线段树+离线+离散化

    http://acm.hdu.edu.cn/showproblem.php?pid=4288 開始的时候,果断TLE,做的方法是,线段树上只维护%5==3的坐标,比方1 2 3 4 5 6 7  假设 ...

  10. 《Effective Modern C++》翻译--条款4:了解怎样查看推导出的类型

    条款4:了解怎样查看推导出的类型 那些想要了解编译器怎样推导出的类型的人通常分为两个阵营. 第一种阵营是实用主义者.他们的动力通常来自于编敲代码过程中(比如他们还在调试解决中),他们利用编译器进行寻找 ...