当前位置:  开发笔记 > 后端 > 正文

正确使用transitionFromViewController:toViewController:duration:options:animations:completion:

如何解决《正确使用transitionFromViewController:toViewController:duration:options:animations:completion:》经验,为你挑选了1个好方法。

我似乎无法找到一个如何transitionFromViewController:toViewController:duration:options:animations:completion:正确使用的好例子.

它是否正确?(假设我想将VC换成另一个)

// Assume fromVC and toVC view controllers are defined and fromVC is already added as a child view controller
[self addChildViewController:toVC];

[self transitionFromViewController:fromVC toViewController:toVC duration:0.3 options:UIViewAnimationOptionTransitionCrossDissolve animations:NULL completion:^(BOOL finished) {
    [fromVC willMoveToParentViewController:nil];
    [fromVC removeFromParentViewController];
    [toVC didMoveToParentViewController:self];
}];

关于何时调用什么文档并不清楚:

addChildViewController:方法调用 willMoveToParentViewController:为孩子添加它之前被添加视图控制器的方法,但它不会调用 didMoveToParentViewController:方法.容器视图控制器类必须在转换到新子项完成后调用子视图控制器的didMoveToParentViewController:或者,如果没有转换,则在调用addChildViewController:方法之后立即调用 .

同样,容器视图控制器负责在调用removeFromParentViewController:方法之前调用 willMoveToParentViewController :方法.该 removeFromParentViewController:方法调用 didMoveToParentViewController:子视图控制器的方法.

另一件事是,在这种情况下你如何使用动画块?请注意上面的代码我刚才提出的NULL.(我对块本身很熟悉,我只是不确定在这个版本中应该放什么)



1> Sean..:

我过去也同样实现过这种事情.但是,我会移动-willMoveToParentViewController:到完成块之外,因为视图控制器应该在移动之前得到通知(即,在完成块运行时,fromVC已经将其父VC设置为nil.所以总而言之,这样的事情:

[self addChildViewController:toVC];
[fromVC willMoveToParentViewController:nil];

[self transitionFromViewController:fromVC toViewController:toVC duration:0.3 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{} completion:^(BOOL finished) {
    [fromVC removeFromParentViewController];
    [toVC didMoveToParentViewController:self];
}];

在动画方面NULL,根据方法文档,您不应该将此参数设置为.如果您没有想要设置动画的视图属性,则可以简单地将其传递给空块^{}.基本上,此参数用于在转换期间为视图层次结构中的视图的属性设置动画.动画属性列表可以在UIView文档的"动画"标题下找到.例如,假设您不希望整个视图处理fromVC为交叉溶解,而只希望其视图层次结构中的一个子视图命名subview1为淡出.您可以使用动画块执行此操作:

[self addChildViewController:toVC];
[fromVC willMoveToParentViewController:nil];

[self transitionFromViewController:fromVC 
                  toViewController:toVC
                          duration:0.3
                           options:UIViewAnimationOptionTransitionNone
                        animations:^{
                                       [subview1 setAlpha:0.0];
                                   }
                        completion:^(BOOL finished) {
                                       [fromVC removeFromParentViewController];
                                       [toVC didMoveToParentViewController:self];
                                   }];


@zxcat正确,但框架期望在调用`-willMove`时视图仍然在层次结构中.因此,它在`-transistionFrom`方法之前.再次,这正是苹果在他们的示例和文档中解释的方式.
推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有