动画到视图控制器是一个UINavigationController

时间:2015-12-25 23:11:26

标签: ios uiviewanimation

我正在尝试使用transitioningDelegate在从VC1转换到VC2时应用自定义动画。这通常有效,但现在需要VC2中的导航栏。因此,我将VC2嵌入到导航控制器中,它将我的导航栏变为现在,但现在不会调用执行动画的方法(通过transitioningDelegate)。我无法将动画用于导航控制器,因为VC2本质上是导航控制器的根,所以后续的推/弹可以是动画但不是第一个。

动画导航控制器时是否需要特殊功能?

这是在Xcode 7,iOS 9和使用Storyboard。

请帮忙。

PS:圣诞快乐!

1 个答案:

答案 0 :(得分:0)

首先,对于您的问题,似乎在您的动画代码中,您应该使用导航控制器对象而不是VC2作为动画的一部分,而不是VC2,因为您嵌入它,否则,你不会在导航堆栈中拥有VC2

根据我的经验,transitioningDelegate是关于呈现具有自定义模式演示类型的视图控制器。如果你想要高级视图控制器转换,它有局限性,因为不是每个场景都适合于呈现(模态)'一个控制器,比如我有一个登录视图控制器,并在登录控制器上显示你的家庭视图控制器是有限的。

我曾经创建了一个容器控制器,它是所有其他控制器的父控件,所以我可以使用

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

获得儿童视图控制器之间的传输和动画的最终控制。它与模态,导航控制器无关,它们只需要在一个共同的父视图控制器中,如appDelegate.window.rootViewController

我们假设我们有一个名为parentViewController

的父控制器

我们手动将VC1navigationController(嵌入VC2)添加到parentViewController并使用您喜欢的动画传输它们:

[parentViewController addChildViewController:VC1]; 
[parentViewController addChildViewController:navigationController]; 
[VC1 willMoveToParentViewController:nil];

[parentViewController transitionFromViewController:VC1
                                  toViewController:navigationController
                                          duration:duration
                                           options:options
                                        animations:^{
                                          // your animation code, or do nothing and use UIViewAnimationOptionTransitionCrossDissolve as options to have a default animation
                                      } completion:^(BOOL finished) {
                                          [navigationController didMoveToParentViewController:parentViewController];
                                          [VC1 removeFromParentViewController];
                                      }];

请注意

[VC1 willMoveToParentViewController:nil];
[navigationController didMoveToParentViewController:parentViewController];
[VC1 removeFromParentViewController];

他们是必不可少的。