试图切换能够用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. 使用rman恢复数据小结

    恢复前提有数据备份 以 alter database open resetlogs 开机以后多要做一次全备(以前的备份失效了) 恢复参数文件: restore spfile from '/home/o ...

  2. windows 路由

    route ? 查看帮助 route print 查看路由表 添加一条路由: route add 10.10.10.0 mask 255.255.255.0  192.168.1.1 #到达10.10 ...

  3. tp框架--------where("1")

    今天看代码的时候看到一个令我难以理解的sql查询语句,这是tp框架里的 return $this->where("1")->order('ar_id desc')-&g ...

  4. 静态构造函数c# 静态块java initallize oc

    静态构造函数c# 静态块java initallize oc 先看一道常见题目,以下代码的执行结果是什么? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1 ...

  5. webkit Safari的样式库

    1,webkit Box模型 CSS定义:-webkit-border-bottom-left-radius: radius; CSS定义:-webkit-border-top-left-radius ...

  6. HDU Integer's Power(容斥原理)

    题意 求[l,r]的最大指数和(1<=l,r<=10^18) 最大指数和(如64=8^2=4^3=2^6,所以64的最大指数和是6) 题解 很明显我们可以先求出[1,n]的最大指数和,然后 ...

  7. Innodb中的事务隔离级别和锁的关系(转载)

    nodb中的事务隔离级别和锁的关系 原文:https://tech.meituan.com/innodb-lock.html ameng ·2014-08-20 15:50 前言: 我们都知道事务的几 ...

  8. 紫书 习题 11-10 UVa 12264 (二分答案+最大流)

    书上写的是UVa 12011, 实际上是 12264 参考了https://blog.csdn.net/xl2015190026/article/details/51902823 这道题就是求出一种最 ...

  9. GenIcam标准(一)

    1.概述 如今的数码摄相机包含了很多的功能,而不仅仅是采集图像.对于机器视觉相机来说,处理图像并把结果附加到图像数据流上,控制附加的硬件,代替应用程序作实时的处理等都是很平常的事情.这也导致了相机的编 ...

  10. 【推荐系统实战】:C++实现基于用户的协同过滤(UserCollaborativeFilter)

    好早的时候就打算写这篇文章,可是还是參加阿里大数据竞赛的第一季三月份的时候实验就完毕了.硬生生是拖到了十一假期.自己也是醉了... 找工作不是非常顺利,希望写点东西回想一下知识.然后再攒点人品吧,仅仅 ...