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