2012-08-09 36 views
5

我想半透明地呈现视图控制器全屏,以便我仍然可以看到它下面的视图。下面的代码提供了新的视图控制器,但它取代了当前的视图控制器。保持原始视图控制器可见的最佳方式是什么?新视图控制器的视图将具有半透明的黑色背景。iOS - 具有透明度的presentViewController

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


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

回答

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]; 
+0

是的,但我想使用视图控制器。 – soleil 2012-08-09 22:52:06

+0

您仍然可以通过alloc/init实例化您的UIViewController,然后mySemiTransparentView可以只是您的ViewController.view – CSmith 2012-08-15 12:18:28

+2

除非您希望半透明视图上的所有内容为.5 alpha(包括按钮等),否则请勿设置查看,因为它级联到所有子组件。你最好创建一个背景视图,它占据整个0.5英寸的屏幕,然后将你的按钮等层叠到它上面。 – 2013-06-06 01:51:35

2

可以存在于以下方式半透明模态控制器:

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

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

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

注意这里,你必须不断UIModalPresentationCurrentContext设置为自我 .modalPresentationStyle,而不是newVC .modalPresentationStyle

此外,当您使用UIModalTransitionStyleCrossDissolvenewVC.view的阿尔法将在过渡期间被重写,所以如果你想半透明背景,你需要保持newVC.view的backgroundColor清晰,只需添加另一个UIView的作为它的子视图半透明backgroundColor

+0

'self.modalPresentationStyle = UIModalPresentationCurrentContext;'或'newVC。 modalPresentationStyle = UIModalPresentationCustom'and + 1也用于答案的第二部分。谢谢 – 2015-03-28 15:59:56