• beginAppearanceTransition


    - (void)beginAppearanceTransition:(BOOL)isAppearing animated:(BOOL)animated __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0);

    - (void)endAppearanceTransition __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0);

     今天看别人代码,用到这两个函数,这两个函数的是成对出现的,基本用法为

    [self beginAppearanceTransition:YES animated:NO];//调用viewWillAppear

     [self  endAppearanceTransition];//调用viewDidAppear

    [self beginAppearanceTransition:NO animated:NO];//调用viewWillDisappear

    下面的解释方法来自于:http://www.cnblogs.com/yuyu-2012/p/4942059.html

    在iOS 5.0及以后,iOS为UIViewController类添加了新的属性和方法:

    1
    2
    3
    4
    5
    6
    @property(nonatomic,readonly) NSArray *childViewControllers
    - (void)addChildViewController:(UIViewController *)childController
    - (void)removeFromParentViewController
    - (void)transitionFromViewController::::::
    - (void)willMoveToParentViewController:(UIViewController *)parent
    - (void)didMoveToParentViewController:(UIViewController *)parent

    这样,就能够将一个页面中的UIViewController控制起来,而不是混乱的共用一个UIViewController,最重要的是,编程习惯的革命:降低了功能的耦合度!

    这里看看这几个方法的使用:

    一、[父视图控制器 addChildViewController:子视图控制器];

    在此,图控制器A添加了另一个图控制器B,那么A充当父视图控制器,B充当子视图控制器。父视图控制器充当了视图控制器容器的角色。

    1、addChildViewController方法:

    1
    - (void)addChildViewController:(UIViewController *)childController

    向视图控制器容器中添加子视图控制器

    childController:子视图控制器

    当要添加的子视图控制器已经包含在视图控制器容器中,那么,相当于先从父视图控制器中删除,然后重新添加到父视图控制器中。

    2、removeFromParentViewController 方法

    1
    - (void)removeFromParentViewController

    从父视图控制器中删除。

    3、transitionFromViewController 方法

    1
    - (void)transitionFromViewController:(UIViewController *)fromViewController toViewController:(UIViewController *)toViewController duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion

    交换两个子视图控制器的位置(由于添加的顺序不同,所以子试图控制器在父视图控制器中存在层次关系)

    fromViewController:当前显示的子试图控制器,将被替换为非显示状态

    toViewController:将要显示的子视图控制器

    duration:交换动画持续的时间,单位秒

    options:动画的方式

    animations:动画Block

    completion:完成后执行的Block

    4、willMoveToParentViewController 方法

    1
    - (void)willMoveToParentViewController:(UIViewController *)parent

    当一个视图控制器从视图控制器容器中被添加或者被删除之前,该方法被调用parent:父视图控制器,如果没有父视图控制器,将为nil

    注意点:

    1. 当我们向我们的视图控制器容器中调用removeFromParentViewController方法时,必须要先调用该方法,且parent参数为nil:

      [将要删除的视图控制器 willMoveToParentViewController:nil];

    2. 当我们调用addChildViewController方法时,在添加子视图控制器之前将自动调用该方法。所以,就不需要我们显示调用了。

    5、didMoveToParentViewController 方法

    1
    - (void)didMoveToParentViewController:(UIViewController *)parent

    当从一个视图控制容器中添加或者移除viewController后,该方法被调用。

    parent:父视图控制器,如果没有父视图控制器,将为nil

    当我们向我们的视图控制器容器(就是父视图控制器,它调用addChildViewController方法加入子视图控制器,它就成为了视图控制器的容器)中添加(或者删除)子视图控制器后,必须调用该方法,告诉iOS,已经完成添加(或删除)子控制器的操作。

    removeFromParentViewController 方法会自动调用了该方法,所以,删除子控制器后,不需要在显示的调用该方法了。

    其实,这几个方法中的API说明,看的还懂。

    二、关于willMoveToParentViewController方法和didMoveToParentViewController方法的使用

    1.这两个方法用在子试图控制器交换的时候调用!即调用transitionFromViewController 方法时,调用。

    2.当调用willMoveToParentViewController方法或didMoveToParentViewController方法时,要注意他们的参数使用:

    当某个子视图控制器将从父视图控制器中删除时,parent参数为nil。

    即:[将被删除的子试图控制器 willMoveToParentViewController:nil];

    当某个子试图控制器将加入到父视图控制器时,parent参数为父视图控制器。

    即:[将被加入的子视图控制器 didMoveToParentViewController:父视图控制器];

    3.无需调用[子视图控制器 willMoveToParentViewController:父视图控制器]方法。因为我们调用[父视图控制器 addChildViewController:子视图控制器]时,已经默认调用了。

    只需要在transitionFromViewController方法后,调用[子视图控制器didMoveToParentViewController:父视图控制器];

    4.无需调用[子视图控制器 didMoveToParentViewController:父视图控制器]方法。因为我们调用

    [子视图控制器 removeFromParentViewController]时,已经默认调用了。

    只需要在transitionFromViewController方法之前调用:[子视图控制器 willMoveToParentViewController:nil]。

    经过这几点说明,在一些视图切换的过程中,和视图的换位中,应该可以了解什么时候去调用对应的视图啦。

  • 相关阅读:
    RabbitMQ官方文档翻译之Simple(一)
    rabbitMq集成Spring后,消费者设置手动ack,并且在业务上控制是否ack
    RabbitMQ消息队列知识点归纳
    理解Java中HashMap的工作原理
    mybatis 主键回显
    quart任务调度框架实战
    springmvc常用注解标签详解
    Java程序员玩Linux学操作系统
    在网页中发起QQ临时对话的方法
    软件测试技术学习总结
  • 原文地址:https://www.cnblogs.com/hualuoshuijia/p/6845636.html
Copyright © 2020-2023  润新知