Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为作为UINavigationController的视图控制器设置动画_Ios_Uiviewanimation - Fatal编程技术网

Ios 为作为UINavigationController的视图控制器设置动画

Ios 为作为UINavigationController的视图控制器设置动画,ios,uiviewanimation,Ios,Uiviewanimation,我尝试使用transitioningDelegate在从VC1转换到VC2时应用自定义动画。一般来说,这是可行的,但现在需要在VC2中安装一个导航栏。因此,我在导航控制器中嵌入了VC2,它让我获得了导航栏,但现在没有调用用于制作动画的方法(通过transitioningDelegate)。我不能为导航控制器使用动画,因为VC2本质上是我的导航控制器的根,所以后续的推/弹出可以设置动画,但不能设置第一个 在为导航控制器设置动画时,是否有特殊需要 这是在Xcode 7、iOS 9和使用故事板中实现的

我尝试使用transitioningDelegate在从VC1转换到VC2时应用自定义动画。一般来说,这是可行的,但现在需要在VC2中安装一个导航栏。因此,我在导航控制器中嵌入了VC2,它让我获得了导航栏,但现在没有调用用于制作动画的方法(通过transitioningDelegate)。我不能为导航控制器使用动画,因为VC2本质上是我的导航控制器的根,所以后续的推/弹出可以设置动画,但不能设置第一个

在为导航控制器设置动画时,是否有特殊需要

这是在Xcode 7、iOS 9和使用故事板中实现的

请帮忙


PS:圣诞快乐

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

根据我的经验,TransitionDelegate是关于用自定义模式表示类型表示视图控制器。如果您想要高级视图控制器转换,它有一些限制,因为不是每个场景都适合“呈现(模式)”控制器,例如我得到了一个登录视图控制器,并且在登录控制器上呈现您的主视图控制器是有点限制的

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

- (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

我们手动将
VC1
navigationController
(嵌入
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];