如果我添加一个子视图控制器,并用它来呈现另一个视图控制器,整个根视图会被替换吗?
Posted
技术标签:
【中文标题】如果我添加一个子视图控制器,并用它来呈现另一个视图控制器,整个根视图会被替换吗?【英文标题】:If I add a child view controller, and use it to present another view controller, the whole root view is replaced? 【发布时间】:2012-09-22 21:09:26 【问题描述】:在 ios 5 上,如果我添加一个子视图控制器 addChildViewController
并添加它的视图,比如说,在 (0, 100) 并覆盖整个底部屏幕,然后在这个新的子视图控制器中,呈现另一个视图控制器使用presentViewController
和翻转动画,我以为只有子视图会翻转并呈现一个新视图,但结果是整个视图(除了状态栏之外的整个屏幕)都被翻转了?
我认为他们以“独立的方式”工作?即如果一个子视图控制器呈现另一个视图控制器,替换的是子视图控制器的视图,而不是根视图?
(因此,如果呈现的视图控制器的视图具有黄色背景,现在除了状态栏之外的整个屏幕都具有黄色,而不是仅从 (0,100) 开始并覆盖底部屏幕的子视图控制器的视图)
【问题讨论】:
【参考方案1】:设置childViewController.definesPresentationContext = YES
。
【讨论】:
【参考方案2】:如果您只想翻转子视图控制器,则需要将控制器的视图添加到根视图控制器的视图层次结构中(呸!说快 2 倍!),然后使用 UIView
动画为它们制作动画。
[UIView transitionFromView:controllerB.view
toView:controllerC.view
duration:0.33
options:UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionTransitionFlipFromLeft
completion:^(BOOL finished)
// whatever completion code you need
];
【讨论】:
我认为这会起作用,只是我最初希望通过各种类型的视图控制器以“自包含”的方式完成所有事情 @JeremyL Apple 允许子视图控制器在很多事情中解决以下问题:我有多个控制器,但我不希望他们创建这些委托调用阶梯只是为了做一些事情就像在堆栈上推送一个新的视图控制器一样简单,或者在您的情况下,呈现一个模态视图控制器。UIViewController
收容并非旨在成为一个独立的“让我做一些过渡”。以上是关于如果我添加一个子视图控制器,并用它来呈现另一个视图控制器,整个根视图会被替换吗?的主要内容,如果未能解决你的问题,请参考以下文章