当我将UIViewController
modalPresentationStyle
父UINavigationController
设置为UIModalPresentationCurrentContext
时,UIViewController
没有滑入。没有过渡使用。
这是我的代码:
UIViewController *viewController = [[UIViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
navController.navigationBarHidden = YES;
self.navigationController.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentViewController:navController animated:YES completion:nil];
当我没有设置modalPresenttionStyle
时,一切正常。但我需要这种风格,因为我希望UIViewController
呈现为叠加。
顺便说一句:当ViewController
被解雇时,动画效果很好。
答案 0 :(得分:2)
根据UIViewController.h
标题定义: -
/ *
定义在以模态方式呈现时将用于此视图控制器的过渡样式。组
要呈现的视图控制器上的此属性,而不是演示者。默认为
UIModalTransitionStyleCoverVertical
。
* /
所以你应该在presentingViewController
上应用这个: -
UIViewController *viewController = [[UIViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
navController.navigationBarHidden = YES;
//Here is the change
navController.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentViewController:navController animated:YES completion:nil];
答案 1 :(得分:1)
如果您希望将UIViewController
显示为不是正确方法的叠加层,那么当您这样做时:
[self presentViewController:navController animated:YES completion:nil];
您正在进行模式演示,并且您不会将父视图控制器置于当前视图下方。相反,你会得到UIWindow
,所以它可能会在那里变黑,这不是你想要的。
因此,为了做你想做的事,你需要将你的控制器呈现为一个childViewController,并将它的视图添加到你的父控制器视图中,如下所示:
UIViewController *viewController = [[UIViewController alloc] init];
[self addChildViewController:viewController];
[self viewWillDisappear:animated];
[self.view addSubview:viewController.view];
[self.view bringSubviewToFront:viewController.view];
[viewController didMoveToParentViewController:parentController];
[self viewDidDisappear:animated];
并删除UIViewController
:
[controller.view removeFromSuperview];
[controller willMoveToParentViewController:nil];
[controller.parentViewController viewDidAppear:animated];
[controller removeFromParentViewController];
答案 2 :(得分:1)
如果您想添加叠加层,首先需要确保使用iOS 7的新ViewController转换API。这是一个快速教程Objc.io View Controller Transitions
一旦你完成,你应该有一个动画师和一个符合UIViewControllerTransitioningDelegate协议的viewcontroller。
然后,当您想要呈现控制器时,需要将模态表示样式设置为UIModalPresentationStyleCustom而不是CurrentContext。当然,您的动画师需要配置所呈现控制器的框架,以便您仍然可以看到下面的内容。
这是另一个可能有帮助的教程 - Custom presentations
最后但并非最不重要的是,你将不得不处理任何方向的演示场景,如果你没有在旋转时看到奇怪的行为,因为过渡的容器仍然是纵向的。请在此处查看我的回答 - transitions in any orientation
答案 3 :(得分:1)
UIViewController *viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"MyViewController"];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
navController.navigationBarHidden = YES;
navController.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentViewController:navController animated:YES completion:nil];
使用情节提要标识符启动viewController,它可能有帮助
答案 4 :(得分:1)
如果有帮助,请告诉我,当前视图控制器将被取消,以便动画开始。
UIViewController *viewController = [[UIViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
navController.navigationBarHidden = YES;
self.navigationController.modalPresentationStyle = UIModalPresentationCurrentContext;
[self dismissViewControllerAnimated:YES completion:^{
[self presentViewController:navController animated:YES completion:nil];
}];