5

我想以半透明的方式全屏显示视图控制器,以便我仍然可以看到它下面的视图。以下代码展示了新的视图控制器,但它替换了当前的。保持原始视图控制器可见的最佳方法是什么?新视图控制器的视图将具有半透明的黑色背景。

NewViewController* newVC = [[NSClassFromString(@"NewViewController") alloc] initWithNibName:deviceNib bundle:nil];
newVC.modalPresentationStyle = UIModalPresentationFullScreen;
newVC.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;


[self presentViewController:newVC animated:YES completion:NULL];
4

2 回答 2

6

呈现一个半透明的视图,而不是视图控制器。

mySemiTransparentView.alpha = 0.0f;
[self.view addSubview:mySemiTransparentView];

mySemiTransparentView 是您的全屏视图。您可以将其设置为动画:

[UIView beginAnimations:@"fadeIn" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDuration:0.4f];
mySemiTransparentView.alpha = 0.5f;
[UIView commitAnimations];
于 2012-08-09T20:17:28.607 回答
2

您可以通过以下方式呈现半透明模态控制器:

NewViewController* newVC = [[NSClassFromString(@"NewViewController") alloc] initWithNibName:deviceNib bundle:nil];

self.modalPresentationStyle = UIModalPresentationCurrentContext;
newVC.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;

[self presentViewController:newVC animated:YES completion:NULL];

请注意,您必须将常量UIModalPresentationCurrentContext设置为self .modalPresentationStyle,而不是newVC .modalPresentationStyle

此外,当您使用UIModalTransitionStyleCrossDissolve时, newVC.view的 alpha将在过渡期间被覆盖,因此如果您想要半透明背景,您需要保持newVC.viewbackgroundColor清晰,只需添加另一个 UIView 作为它的子视图半透明背景颜色

于 2014-07-18T06:12:59.293 回答