用动画替换window.rootViewController部分工作

时间:2012-11-11 15:59:49

标签: iphone objective-c ios xcode uiviewcontroller

我正在尝试用动画替换窗口rootViewController,它只能部分工作。

我以编程方式创建了一个UINavigationController -

UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"InboxStoryboard" bundle:nil];

UIViewController *innerViewController = [storyBoard instantiateViewControllerWithIdentifier:@"centerView"];
UINavigationController *centerView = [[UINavigationController alloc] initWithRootViewController:innerViewController];

然后我替换包含在动画块中的窗口根视图控制器 -

[UIView transitionWithView:self.viewController.view.window
                  duration:0.5
                   options: UIViewAnimationOptionTransitionFlipFromLeft
                animations:^{
                    self.viewController.view.window.rootViewController = centerView;
                }
                completion:nil];

发生的事情是动画发生但我创建的控制器只是部分可见,请看下面的图片 -

因此,您可以在旋转期间看到视图仅部分呈现。

之前有人遇到过这种行为吗?

2 个答案:

答案 0 :(得分:16)

所以在搜索后我发现问题出在[UIView transitionWithView:...] 在stackoverflow中搜索了一下,我找到了Swapping rootViewController with animation

使用[UIView transitionFromView:..]效果很好。

新代码 -

[UIView transitionFromView:self.window.rootViewController.view
                    toView:self.centerViewController.view
                  duration:0.5
                   options:UIViewAnimationOptionTransitionCurlUp
                completion:^(BOOL finished)
                {
                    self.window.rootViewController = self.centerViewController;
                }];

答案 1 :(得分:0)

您使用的是自动布局吗?如果是这样,请尝试禁用它。我遇到了自动布局和动画的多个问题。