zoukankan      html  css  js  c++  java
  • 试图切换控制addChildViewController、_transitionFromViewController

    试图切换能够用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内存释放。所以新的方法确实能有效地节省内存,也能方便地处理内存不足时的资源回收
    • 能够把代码更好分开

  • 相关阅读:
    【APUE | 10】函数signal
    【C++ Primer | 15】C++虚函数表剖析②
    【C++ Primer | 15】C++类内存分布
    VMware虚拟机 Ubuntu 16.04 安装
    主题
    【C++ Primer | 15】构造函数与拷贝控制
    08 IO库
    001 库函数【01】
    DataTable序列化及反序列化Json
    DbHelper简单的使用
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/7054640.html
Copyright © 2011-2022 走看看